无法在应用程序助手中使用cancan ability.rb中的方法

时间:2014-11-11 16:56:22

标签: ruby-on-rails devise cancan

我正在使用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。为什么是这样?我在视图中使用此功能,而且它都是花花公子。

1 个答案:

答案 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