我需要只向特定用户显示ActiveAdmin表单中的一些表单字段。 但是,当我尝试使用此代码检查用户状态时:
ActiveAdmin.register Store do
# ...
form do |f|
f.inputs "Basic" do
if current_admin_user.super_admin?
f.input :admin_user
end
# ...
end
end
end
我得到了
undefined local variable or method `current_admin_user' for #<ActiveAdmin::DSL:0xdb8e798>
CanCan方法在ActiveAdmin表单定义中也不起作用。
一般来说,我的问题是:如何根据当前用户类型管理管理界面显示? 特别是,如何从ActiveAdmin定义中获取当前设计用户对象?
答案 0 :(得分:2)
这是一个范围问题。您可以尝试使用f.template对象访问辅助方法,如下所示:
ActiveAdmin.register Store do
# ...
form do |f|
f.inputs "Basic" do
if f.template.current_admin_user.super_admin?
f.input :admin_user
end
# ...
end
end
end
祝你好运。
答案 1 :(得分:0)
我找到了解决此问题的方法。在/app/admin/stores.rb中:
ActiveAdmin.register Store do
# ...
form :partial => 'form'
# ...
end
然后在/app/views/admin/stores/_form.html.haml:
= semantic_form_for [:admin, @store] do |f|
= f.inputs "Basic" do
- if current_admin_user.super_admin?
=f.input :admin_user
这根本不方便,但有效。
答案 2 :(得分:0)
我知道这个帖子有点旧,但我刚刚发现了一个很好的小修复。我没有使用设计,我使用Twitter API登录我的用户
在active_admin.rb
中,查找config.current_user_method
并将current_user
的默认值更改为current_admin_user
config.current_user_method = :current_user
同时更改路线中的logout_link_path
以包含as: :destroy_user_session