Не удается получить доступ к устройству current_admin_user в определении формы AcitveAdmin - PullRequest
3 голосов
/ 24 ноября 2011

Мне нужно отображать некоторые поля формы в форме 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 ]

2 голосов
/ 13 января 2012

Это вопрос сферы. Вы можете попробовать получить доступ к вспомогательному методу, используя объект 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

Удачи.

0 голосов
/ 11 ноября 2014

Я знаю, что эта ветка немного старая, но я только что нашёл для этого маленькое исправление. Я не использую devise, я использую 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

0 голосов
/ 25 ноября 2011

Я нашел решение этой проблемы.В /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

Это не удобно ввсе, но работает.

...