2011-05-14 106 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) 

這最終成爲工作效率大約爲別的我能想出。