1

我正在开发一个 Rails 应用程序,并设置了 Devise 并使用所有默认设置,并且正在设置 CanCan。

以下是“能力”类的内容,(不是我的代码,基于几个教程);

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 中的 NoMethodError#edit

未定义的方法“user_signed_in?” 为了 #

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

有什么想法可以在这里访问user_signed_in?吗?从长远来看,我打算从用户记录中读取一个值来识别他们的访问级别,但重要的是这个概念有效,因为变量将来自同一个地方!

谢谢!

4

1 回答 1

1

I'm not sure exactly what you're trying to do but you can include Devise::Controllers::Helpers to the Ability class and then replace user_signed_in? with signed_in?(:user).

于 2013-06-15T18:24:09.607 回答