Я использую одну и ту же раскладку для нескольких контроллеров, и внутри этой раскладки я включаю меню, использующее вызов помощника, например:
<%= side_menu %>
Что я хотел бы сделать, так это изменить содержимое side_menu в зависимости от контроллера, который вызывает макет. В идеальном мире я мог бы определить side_menu в application_controller.rb и в других вспомогательных файлах, и тогда соответствующий помощник будет выбран в зависимости от контроллера; другими словами, что-то вроде этого:
# application_helper.rb
def side_menu
"generic menu This goes here"
end
# users_helper.rb
def side_menu
"menu for users goes here"
end
# guests_helper.rb
def side_menu
"menu for guests goes here"
end
Это не работает, потому что в Rails 3 загружаются все вспомогательные файлы, и я не имею никакого контроля над тем, какое именно side_menu будет вызываться. Было бы замечательно, если бы была возможность загрузить only application_helper.rb и специфичный для контроллера помощник, но его пока нет (*).
Как лучше всего изменять содержимое помощника в зависимости от контроллера? В настоящее время я определяю side_menu один раз в application_helper.rb, а затем проверяю контроллер, чтобы посмотреть, что добавить. Это кажется неправильным, так как проблема почти кричит о ответе «подкласс и переопределение» - что я не могу сделать из-за поведения «помощника: все» Rails 3. Предложения?