2013-05-22 16 views
0

希望我沒有重複一個問題。它與this onethis one類似,但不完全相同。很多不同的內容很多Rails的意見 - 如何做DRY

關於重複的問題,這是我的問題。我是新來的Rails btw。

我有一個(Twitter Bootstrap)藥片/選項卡集,如果用戶在與該選項卡相關的頁面上,我希望<li>類設置爲"active"。到目前爲止,我正在做一個笨方法。在我的每一個觀點我都這樣(簡化):

<% content_for :pills do %> 
    <li><a href="/">Home</a></li> 
    <li class="active"><a href="/about">About</a></li> <----------- active class 
    <li><a href="/contact">Contact</a></li> 
<% end %> 

,並在每個視圖我有相同的代碼(DOH),但與類設置爲"active"在另一個標籤/藥片上。

大多數標籤內容來自相同app/views/<some view directory>/但一個選項卡來自app/views/<some OTHER view directory>/但我想這不是問題。

如何在不重複每個視圖中的類似代碼的情況下解決此問題?

非常感謝。

+0

也許創建一些partials會有幫助嗎? http://guides.rubyonrails.org/layouts_and_rendering.html – Richlewis

回答

1

我實際上遇到了同樣的事情,並創建了一個我在幾個項目中使用過的幫助器。

將此添加到app/helpers/layout_helper.rb文件。

module LayoutHelper 
    def nav_class_for(*controllers) 
    :active if controllers.any? do |controller| 
     controller_name.to_sym == controller.to_sym || params["#{controller.to_s.singularize}_id"] 
    end 
    end 
end 

然後我就這樣使用它。

<li class="<%= nav_class_for(:about) %>"><a href="/about">About</a></li> 

只要將它傳遞給控制器​​或控制器的名稱,您希望菜單項被激活。它也應該對這些控制器下面的任何嵌套路由有效。

+0

所以我幾乎需要:) ..我只需要LayoutHelper來查看動作名稱,因爲我對同一個控制器有多個視圖。有任何想法嗎?如果我解決了問題,我會繼續嘗試並發表評論。 – ale