在CanCan能力结果中设计"current_user"方法时出现"未定义方法"错误

Maa*_*aay 0 authorization ruby-on-rails devise ruby-on-rails-3

我正在尝试在我的rails3 + mongoid应用程序中使用具有CanCan角色的Devise授权.现在我必须限制用户编辑事件的权限,因此只有他们的作者可以这样做.该事件的作者由该行确定:

    <%= f.hidden_field (:author, :value =>current_user.email) %>
Run Code Online (Sandbox Code Playgroud)

所以,现在在CanCan的Ability文件中我正在尝试使用此代码:

  class Ability  
  include CanCan::Ability 

  def initialize(user)  
    user ||= User.new    
    if user.role? :admin  
      can :manage, :all  
    else 
        can :read, :all  
      end
      if
        user.role?(:normal)
        can :create, Event  
        can :update, Event do |event|  
          event.try(:author) == current_user.email
      end 
        can :create, Comment  
        can :update, Comment do |comment|  
        comment.try(:author) == current_user.email 
      end 
    end 
  end
Run Code Online (Sandbox Code Playgroud)

结束

但这导致了我的错误:

未定义的局部变量或方法`current_user'for#

然后我试着改变

can :update, Event do |event|  
          event.try(:author) == current_user.email
Run Code Online (Sandbox Code Playgroud)

event.try(:author) == Devise.current_user.email
Run Code Online (Sandbox Code Playgroud)

但这导致了这个错误

设计的未定义方法`current_user':模块

那么,我应该怎么做以及如何从ability.rb中调用`current_user'方法?提前感谢您的任何提示.

Hak*_*onB 6

你为什么current_user在初始化方法中提到它?为什么不把user它作为方法的参数提供?

CanCan将在需要时为current_user调用initialize.