2014-03-29 40 views
0

我試圖重構的一些代碼,在我看來通過迭代控制器方法鑑於

<% if controller.controller_name == "overview" %> 
<div id="left-menu"> 
    <ul> 
    <li>Office</li> 
    <hr> 
    <li><%= link_to "Overview", root_path %></li> 
    <li><%= link_to "Personnel", personnel_path %></li> 
    <li><%= link_to "Results", results_path %></li> 
    <li><%= link_to "Statistics", statistics_path %></li> 
    </ul> 
    <ul> 
    <li>Economy</li> 
    <hr> 
    <li>Finances</li> 
    <li>Contracts</li> 
    <li>Transfers</li> 
    <li>Sponsors</li> 
    </ul>    
</div> 
<% elsif controller.controller_name == "market" %> 
<div id="left-menu"> 
    <ul> 
    <li>Items</li> 
    <hr> 
    <li><%= link_to "Engines", market_engines_path %></li> 
    <li><%= link_to "Weapons", market_weapons_path %></li> 
    <li><%= link_to "Armor", market_armor_path %></li> 
     <li><%= link_to "Chips", market_chips_path %></li> 
    </ul> 
    <ul> 
    <li>Personnel</li> 
    <hr> 
    <li><%= link_to "Drivers", market_drivers_path %></li> 
    <li><%= link_to "Servicemen" %></li> 
    <li><%= link_to "Programmers" %></li> 
    <li><%= link_to "Managers" %></li> 
    </ul>    
</div> 
<% end %> 

如果每個<li>對應於控制器的方法。我希望能夠將新方法添加到我的控制器中,然後將它們動態插入到視圖中。那麼是否有一種方法可以迭代控制器中的方法?

+1

http://stackoverflow.com/的重複問題/ 8686441 /如何獲取列表控制器和操作在紅寶石在軌? –

回答

0

按照所引用的問題提供了答案,Controller.action_methods似乎是你需要的,但是,融入你的代碼的方法如下:

<% lists = %w(items personell) %> 
<% for list in lists do %> 
    <ul> 
     <li><%= list.titleize %></li> 
     <hr> 
     <% items = MarketsController.action_methods %> 
     <% for item in items do %> 
      <li><%= link_to item.titleize, eval("market_#{item}_path") %></li> 
     <% end %> 
    </ul> 
<% end %>