【发布时间】:2015-05-27 10:37:21
【问题描述】:
您好,我是第一次使用 cancan gem。我已将其包含在我的 gem 文件中
gem 'cancancan', '~> 1.10'
然后完成捆绑安装并运行命令rails g cancan:ability,通过它生成我的ability.rb,我在其中给出了这个代码
class Ability
include CanCan::Ability
def initialize(employee)
employee ||= Employee.new
if employee[:role]== 'HR'
can :manage, :all
else
can :read, :all
end
end
end
在我的 application_Controller 中给出这个
rescue_from CanCan::AccessDenied do |exception|
flash[:error] = "Access denied."
redirect_to root_url
end
现在我用 employee[:role]= 'HR' 登录,当我要创建部门时,它给了我错误
NameError (undefined local variable or method `current_user' for #<DepartmentsController:0xb48a0c0>):
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_additions.rb:357:in `current_ability'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:215:in `current_ability'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:98:in `initial_attributes'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:91:in `assign_attributes'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:86:in `build_resource'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:66:in `load_resource_instance'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:32:in `load_resource'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:25:in `load_and_authorize_resource'
vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:10:in `block in add_before_filter'
请指导我如何解决这个问题。提前致谢。
【问题讨论】:
-
您有面向用户或员工的设计吗?还发布您的设计路线
-
没有使用 authlogic
-
您必须在 application_controller 中定义 current_user 辅助方法。对吗?
-
您的应用程序控制器中是否有以下内容,例如
helper_method :current_user private def current_user_session return @current_user_session if defined?(@current_user_session) @current_user_session = UserSession.find end def current_user @current_user = current_user_session && current_user_session.record end
标签: ruby-on-rails rubygems cancan