我正在使用Devise和cancancan。在我的应用程序助手中,我有 -
def is_part_of_team?(book)
on_team = false
book.contributions.each do |contribution|
if contribution.user == current_user
on_team = true
end
end
if book.user == current_user
on_team = true
end
return on_team
end
并且在ability.rb中我有 -
include ApplicationHelper
...
can :update, Book do |book|
is_part_of_team?(book)
end
...这会引发错误 -
undefined local variable or method `current_user' for #<Ability...
可能有更好的方法可以做到这一点,但我只是想知道为什么cancan不喜欢应用程序助手中的current_user。为什么是这样?我在视图中使用此功能,而且它都是花花公子。
答案 0 :(得分:0)
我的方法完全不好。
而不是帮助程序中的所有代码,我没有理解我可以使用它 -
book.contributions.where(user_id: user.id).any?
...得到完全相同的结果。这意味着在ability.rb我可以拥有 -
can :update, Book do |book|
(book.try(:user) == user) || book.contributions.where(user_id: user.id).any?
end