Я не уверен, если я предоставлю вам умный способ, но лучше что-то, чем ничего ...
Если в вашем меню есть ссылки - это не в вашем примере, но я полагаю, что в реальном меню должны быть ссылки, а не только пункты. Например, что-то вроде этого в HAML: (я использую HAML, так как написание ERB в текстовой области - просто ад)
%ul
%li= link_to "Home", :controller => "home"
%li= link_to "Books", :controller => "books"
%li= link_to "Pages", :controller => "pages"
Тогда этот помощник (вставленный из моего проекта) пригодится:
#
# Shows link with style "current" in case when the target controller is same as
# current
# beware: this helper has some limitation - it only accepts hash as URL parameter
#
def menu_link_to(title, url, html_options = {})
unless url.is_a?(Hash) and url[:controller]
raise "URL parameter has to be Hash and :controller has to be specified"
end
if url[:controller] == controller.controller_path
html_options[:class] = "current"
end
link_to(title, url, html_options)
end
С помощью этого помощника вы можете заменить "link_to" в приведенном выше коде на "menu_link_to" и все!