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

时间:2011-03-19 18:43:30

标签: ruby-on-rails ruby-on-rails-3 authorization devise

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

    <%= f.hidden_field (:author, :value =>current_user.email) %>

所以,现在在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

但这导致了我的错误:

  

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

然后我试图改变

can :update, Event do |event|  
          event.try(:author) == current_user.email

event.try(:author) == Devise.current_user.email

但是会出现此错误

  

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

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

1 个答案:

答案 0 :(得分:6)

为什么在初始化方法中引用current_user?为什么不只是作为方法参数提供的user

CanCan会在需要时调用current_user的初始化。