我正在尝试重构我视图中的一些代码
<% 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>
对应于控制器中的方法。我希望能够向控制器添加新方法,然后将它们动态插入视图中。那么有没有办法迭代控制器中的方法?
答案 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 %>