在视图中迭代控制器方法

时间:2014-03-29 12:02:50

标签: ruby-on-rails

我正在尝试重构我视图中的一些代码

<% 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 个答案:

答案 0 :(得分: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 %>