Этот метод не очень сложен.Самая сложная часть - проверка доступа, и даже это не так уж плохо.Одна из причин, по которой помощники должны скрывать подобные вещи, чтобы вы не делали ничего плохого.
Повторение между двумя вариантами link_to
может потребовать некоторого внимания.Вы можете немного перестроить его, но:
def admin_toggle_button
return '' if !user_signed_in? || !( current_user.has_role?(:admin) || ( @collection && can?(:curate,@collection) ) )
opts = {
:id => 'admin_toggle_button',
:remote => true,
:title => 'Show Admin Menu'
}
admin_menu = :on
if session[:admin_menu] == :on
opts[:title] = 'Hide Admin Menu'
opts[:class] = 'selected'
admin_menu = :off
end
link_to('Admin Tools', edit_shared_path(:admin_menu => admin_menu), opts)
end
Этот подход подчеркивает различия между двумя возможными link_to
вызовами.Если session[:admin_menu] != :on
встречается чаще, возможно, вы захотите изменить логику, чтобы запустить opts
и admin_menu
с настройками «Скрыть меню администратора», а затем настроить их на случай != :on
при необходимости.
def admin_toggle_button
return '' if !user_signed_in? || !( current_user.has_role?(:admin) || ( @collection && can?(:curate,@collection) ) )
opts = {
:class => 'selected',
:id => 'admin_toggle_button',
:remote => true,
:title => 'Hide Admin Menu'
}
admin_menu = :off
if session[:admin_menu] != :on
opts[:title] = 'Show Admin Menu'
opts.delete(:class)
admin_menu = :on
end
link_to('Admin Tools', edit_shared_path(:admin_menu => admin_menu), opts)
end