0

私は Rails 3 アプリを持っており、さまざまなモデルのビューに含めたい "管理" パーシャルを作成しています。パーシャルにはリソースの多いリンク (new、index、show など) が含まれますが、routes.rb でリソースのルート (index など) が無効になっている場合、私のデザインは失敗します。

サンプル ビュー (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') %>
4

1 に答える 1

1

多分これはあなたを助けるでしょう:

UsersController.action_methods(クラスメソッドです)

また

UsersController.new.available_action? :index(インスタンスメソッドです)

詳細: http://api.rubyonrails.org/classes/AbstractController/Base.html#method-i-action_methods

于 2013-07-16T00:44:59.173 に答える