Rails ActiveAdmin - получить current_admin_user в навигации по утилите?

В документах ActiveAdmin говорится, что я могу переопределить навигацию по служебной программе следующим образом:

ActiveAdmin.setup do |config|
  config.namespace :admin do |admin|
    admin.build_menu :utility_navigation do |menu|
      menu.add label: "ActiveAdmin.info", url: "http://www.activeadmin.info", html_options: { target: :blank }
      admin.add_logout_button_to_menu menu # can also pass priority & html_options for link_to to use
    end
  end
end

В нем также говорится, что по умолчанию отображается адрес электронной почты текущего пользователя. Как он получает адрес электронной почты текущего пользователя? Когда я пытаюсь заменить значение menu.add label на current_admin_user, я получаю сообщение об ошибке, в котором указано, что current_admin_user не определено. Как мне получить доступ к информации о текущем авторизованном пользователе из файла конфигурации? Как ActiveAdmin делает это за кулисами?


person Kvass    schedule 11.07.2013    source источник


Ответы (2)


Просто попробуйте следующее:

ActiveAdmin.setup do |config|
  config.namespace :admin do |admin|
    admin.build_menu :utility_navigation do |menu|
      menu.add label: "ActiveAdmin.info", url: "http://www.activeadmin.info",
                                      html_options: { target: :blank }
      admin.add_current_user_to_menu  menu
      admin.add_logout_button_to_menu menu
    end
  end
end
person G. I. Joe    schedule 01.10.2014

person    schedule
comment
Спасибо за код. Можете ли вы объяснить, почему это работает за кулисами и почему я мог получать ту ошибку, которую получал? - person Kvass; 11.07.2013
comment
он работает из-за использования процедур, которые вызываются в необходимом контексте, так что current_admin_user определяется в момент вызова процедуры - person Fivell; 11.07.2013
comment
Хорошо, спасибо. Также своего рода несвязанный q - если блок является процедурой (насколько я понимаю), почему я не могу передать блок, например :if => { current_active_admin_user? } и пропустить proc перед ним? Что именно делает proc перед ним? - person Kvass; 11.07.2013
comment
поскольку у manu.add должен быть аргумент хеша, вы не можете хранить блоки в элементах хэша, только объекты, как это есть в Proc. Анонимный блок можно отправить только для параметра lsat ... Думаю, вам стоит прочитать это snowfrog.net/2011/08/30/ruby-blocks-and-procs - person Fivell; 11.07.2013
comment
Чтобы указать, часть URL-адреса должна быть edit_admin_admin_path вместо edit_admin_admin_user_path. - person Kevon; 17.02.2014