Наивный перевод в (немного) меньший код:
current_controller = params[:controller]
@menu = if current_controller == "menus"
params[:id].present? Menu.find(params[:id]) : Menu.first
elsif current_controller == "items" || current_controller == "categories"
Menu.find(params[:menu_id])
else
Menu.last
end
Где этот код находится?
Было бы более разумно иметь это в контроллере базового приложения или фильтреи т. д. и переопределить в трех контроллерах, которые имеют специальный корпус?Или это завернуто в помощника, или ...?
Редактировать Используя Procs.
# Default if hash entry not found.
menus = Hash.new(Proc.new { |p| Menu.last })
# Items and categories controllers
itemcats = Proc.new { |p| Menu.find(p[:menu_id]) }
menus["items"] = menus["categories"] = itemcats
# Menus controller
menus["menus"] = Proc.new { |p| p[:id] ? Menu.find(p[:id]) : Menu.first }
@menu = menus[params[:controller]].call(params)
(Больше или меньше.)