我有一个 Rails 3 应用程序,正在编写一个“管理”部分,我想包含在许多不同模型的视图中。部分将包括资源丰富的链接(例如新、索引、显示),但如果资源在 routes.rb 中禁用了路由(例如索引),我的设计将失败。
示例视图 (views/my_resources/show.html.erb):
<% provide(:title, 'My Resource') %>
<div style="float:right;">
<%= render '/shared/resource_menu' %>
</div>
<h1>My Resource</h1>
<%= @my_resource.name %>
摘自 /shared/_resource_menu.html.erb:
<div class="submenu">
<b><%= File.basename(params[:controller]).pluralize.titleize %></b><br />
<% if params[:action] != 'index' %>
<%= link_to 'Index', url_for(:controller => params[:controller], :action => 'index', :only_path => true) %><br />
<% end %>
<% if params[:action] != 'new' %>
<%= link_to 'New', url_for(:controller => params[:controller], :action => 'new', :only_path => true) %><br />
<% end %>
</div>
目前,我已经破解了它,以便每个条件看起来像:
<% if params[:action] != 'index' && !@omit_index_in_resource_menu %>
我@omit_index_in_resource_menu
在相关控制器中手动设置,但这比我想要的要笨重。
我可以做一些更优雅的事情吗,比如:
<% if params[:action] != 'index' && controller.actions.include?('index') %>