无法在Active Admin表单定义中访问设备current_admin_user

时间:2011-11-24 07:43:09

标签: forms ruby-on-rails-3.1 devise activeadmin

我需要只向特定用户显示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定义中获取当前设计用户对象?

3 个答案:

答案 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