:user has_many :books
:book belongs_to :user
:book has_many :contributions
:user has_many :contributions
:contribution belongs_to :book
:contribution belongs_to :user
我希望能够控制/ books / show中的行为,具体取决于用户是否是该书的撰稿人。在康康舞中,我的目标是 -
can :contribute, Book if @book.contributions.include?(user_id)
那行代码是错误的,(nil:NilClass的未定义方法`贡献')但是有没有正确的方法来放置它,或者我是否想要深入研究它?
答案 0 :(得分:2)
定义异能时,您应该使用hash of conditions或block of code。在你的情况下,这应该工作:
can :contribute, Book do |book|
book.contributions.include?(user_id)
end
然后,当您在控制器或视图中定义授权时,如readme中所述,您可以传递@book
变量,该变量将在您的能力定义中传递给阻止,如:
authorize! :contribute, @book
或
<% if can? :contribute, @book %>