一本书有很多章节。用户has_many Books。
我正在使用设计和cancancan,我想让用户:为他们拥有的任何书创建章节。我的问题是,章节不属于一本书,直到它存在于ability.rb -
中can [:read, :update, :destroy], Chapter do |chapter|
chapter.book.user_id == user.id
end
很好,但是使用它:create会抛出一个nil方法,因为在创建对象之前,它没有任何属性。我已经使用了一个检查控制器中的创建动作 -
if @chapter.book.user == current_user && @chapter.save
......这很好,但必须有更好的方法,对吧?
答案 0 :(得分:2)
在这种情况下,您可以使用:
# or just :manage
can [:read, :update, :destroy, :create], Chapter do |chapter|
chapter.new_record? || chapter.book.user_id == user.id
end
但是,我会稍微简化一下:
can :manage, Chapter, book: { user_id: user.id }