设计'user_signed_in?'无法从CanCan'Ability'模型访问

时间:2013-06-15 18:10:10

标签: ruby-on-rails devise cancan

我正在使用Rails应用程序并设置Devise并使用所有默认设置,并设置CanCan。

以下是'Ability'类的内容,(不是我的代码,基于几个教程);

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user_signed_in?
        can :manage, :all
    end
  end
end

我知道文件本身有效,因为我已经为我的一个控制器添加了样本authorize! :edit, @document。如果我删除if user_signed_in?行(当然还有end),那么当can :manage, :all行出现时,我可以访问document控制器的操作,它,它说'拒绝访问'。

但是,当我尝试使用user_signed_in?行时,我收到以下错误;

  

DocumentsController#edit

中的NoMethodError      

未定义的方法`user_signed_in?'对于#

而且,有趣的是,user_signed_in?在我的视图中完美运行,我在其中显示一个登录框或当前登录用户的详细信息if ... else块。

我在这里如何访问user_signed_in?的任何想法?从长远来看,我打算从用户的记录中读取一个值来识别他们的访问级别,但这个概念很有用,因为变量将来自同一个地方!

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定您要做什么,但您可以将Devise::Controllers::Helpers添加到Ability课程,然后将user_signed_in?替换为signed_in?(:user)