使用CanCan验证用户的能力时,通过模型关联进行验证

3

我有一个TakeAction模型,它看起来像这样:

class TakeAction < ActiveRecord::Base
  belongs_to :user
  has_many :take_action_notes
  attr_protected :user_id  
end

还有一个TakeActionNote模型,看起来像这样:

class TakeActionNote < ActiveRecord::Base
  belongs_to :take_action
  validates_presence_of :note
end

我正在使用CanCan,尝试允许拥有take_action权限的用户创建和删除(管理)notes。

我已经尝试使用如下代码块来定义权限:

 can :manage, TakeActionNote do |action, note|
    note.take_action.user.id == user.id
 end

我可以在take_action中添加注释,但是当我尝试销毁它时,我会得到以下错误:

Take action notesController#33中的NoMethodError 未定义方法`take_action' for nil:NilClass

我是否遗漏了什么或者做错了什么?任何帮助都将不胜感激。谢谢!

1个回答

4
问题实际上出现在TakeActionNotes控制器中,与CanCan无关。
另外,我将Ability.rb中的块条件更改为哈希条件,如下所示:
can :manage, TakeActionNote, :take_action => { :user_id => user.id }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接