2011-05-14 47 views
0

我遇到了一种奇怪的问题。我展示一个视图,人们可以通过不同的范围浏览照片,和我有以下的菜单在我看来:Rails视图:创建菜单

#photo_browser 
    = link_to 'Recent', browse_photos_path(:view=>'recent'), :class => 'button' 
    = link_to 'Best Photograhy', browse_photos_path(:view=>'best'), :class => 'button' 
    = link_to 'Most Loved Places', browse_photos_path(:view=>'loved'), :class => 'button' 
    = link_to 'Flagged', browse_photos_path(:view=>'flagged'), :class => 'button' if user_signed_in? && current_user.has_role?(:admin) 

因此,当前选择的视图是在URL(即photos/browse?view=recent)设置了一个param。 现在,我想添加一个“选定”类到当前视图的任何链接。问题是我还没有想到一个好的方法来做到这一点。我可以做类似...

- @presenter.view == recent? recentClass = 'selected' : recentClass = nil 
= link_to 'Recent', browse_photos_path(:view=>'recent'), :class => 'button ' + recentClass 

...对于每个链接,但这似乎真的很冗长和一种马虎。

所以,我的问题是,有没有更好的方法来处理这种情况?

那么,是否最适合创建这些菜单以生存在视图文件,帮助程序,Presenter模型或其他内容中的任何代码句柄?

感谢您的帮助!

+0

为了做类似的事情,我使用了[Tabs on Rails](http://www.simonecarletti.com/code/tabs_on_rails/)。不知道它是否适用于查询参数,但给它一个镜头。 – Zabba 2011-05-14 18:41:04

回答

0

我结束了一个辅助方法解决这个:

def browse_menu_button(name,view) 
    @presenter.view == view ? btnClass = 'button selected' : btnClass = 'button' 
    link_to name, browse_photos_path(:view=>view), :class => btnClass 
end 

然后在我的观点:

#photo_browser 
    = browse_menu_button('Recent', :recent) 
    = browse_menu_button('Best Photography', :best) 
    = browse_menu_button('Most Loved Placed', :loved) 
    = browse_menu_button('Flagged', :flagged) if user_signed_in? && current_user.has_role?(:admin) 

这最终成为工作效率大约为别的我能想出。