确定Rails资源控制器是否已启用操作

时间:2013-07-16 00:30:36

标签: ruby-on-rails controllers

我有一个Rails 3应用程序,我正在编写一个“管理”部分,我希望包含在许多不同模型的视图中。部分将包括资源丰富的链接(例如new,index,show),但如果资源在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') %>

1 个答案:

答案 0 :(得分:1)

也许这会对你有所帮助:

UsersController.action_methods(这是一种课堂方法)

UsersController.new.available_action? :index(这是一个实例方法)

更多信息:http://api.rubyonrails.org/classes/AbstractController/Base.html#method-i-action_methods