我一直在使用rails_admin v0.7.0与清除宝石成功地到这一点。我试图将rails_admin更新到v1.0今天,但我得到一个未定义的变量或方法错误的current_user
。在v0.7.0中,RailsAdmin::MainController
似乎继承自ApplicationController
,而在v1.0中,它直接继承自ActionController::Base
,这将解释current_user
现在未定义(我相信current_user
在ApplicationController
中定义了清除宝石)。然而,既然我没有找到有这个问题的其他人,我想我一定错过了什么。
我不是在这个应用程序上设置许可的人,但我不认为我们在做任何会影响这个的非标准的事情。Clearance::Controller
包含在ApplicationController
中。没有current_user
的特殊定义。
配置初始化/rails_admin.rb
RailsAdmin.config do |config|
# Popular gems integration
## Clearance
config.authorize_with do |controller|
unless current_user.admin?
redirect_to(
main_app.root_path,
alert: "You are not permitted to view this page"
)
end
end
config.current_user_method { current_user }
end
你是正确的,Rails Admin从默认情况下继承::ActionController::Base
,这就是导致你的问题。幸运的是,解决方法很简单。添加config.parent_controller = "::ApplicationController"
到config/initializers/rails_admin.rb
:
RailsAdmin.config do |config|
## == Clearance ==
config.parent_controller = "::ApplicationController"
config.authorize_with do |controller|
unless current_user && current_user.admin?
redirect_to(
main_app.root_path,
alert: "You are not permitted to view this page"
)
end
end
# You actually don't need this line
# config.current_user_method { current_user }
end
如果你需要的话,我已经在这里创建了一个参考库供你比较。