rails奇异资源还是复数吗?

时间:2011-08-04 10:20:27

标签: ruby-on-rails ruby-on-rails-3 routes custom-routes singular

我有一个搜索路线,我想制作单数但是当我指定一个单一路线它仍然会制作多个控制器路线时,它应该是这样的吗?

resource :search

给我

 search POST        /search(.:format)        {:action=>"create", :controller=>"searches"}
 new_search  GET    /search/new(.:format)    {:action=>"new", :controller=>"searches"}
 edit_search GET    /search/edit(.:format)   {:action=>"edit", :controller=>"searches"}
             GET    /search(.:format)        {:action=>"show", :controller=>"searches"}
             PUT    /search(.:format)        {:action=>"update", :controller=>"searches"}
             DELETE /search(.:format)        {:action=>"destroy", :controller=>"searches"}

多个控制器“搜索”

我只有一条路线......创建搜索:

所以我做了:match "search" => "search#create"

如果我仍然想让控制器复数,我只是想知道未来? Rails 3.0.9

4 个答案:

答案 0 :(得分:33)

是的,这就是它应该是的样子。引用Rails Guide on Routing:

  

因为您可能希望将同一个控制器用于单一路径   (/ account)和复数路线(/ accounts / 45),奇异资源图   多个控制器。

http://edgeguides.rubyonrails.org/routing.html#singular-resources

答案 1 :(得分:22)

你可以通过将“search”的复数设置为不可数来解决这个问题,所以在config / initializers / inflections.rb中

ActiveSupport::Inflector.inflections do |inflect|
   inflect.uncountable %w( search )
end

现在应该只允许搜索

答案 2 :(得分:6)

您是否只想为创建生成一条路线?

如果是这样的话:

resource :search, :only => :create

REST资源的控制器名为searching_controller的事实是一种约定(您可以通过在resource :search, :only => :create, :controller => :search的路径中强制控制器的名称来更改,但它不值得......)。

答案 3 :(得分:5)

搜索真的是资源吗?如果是,那么您创建的是具有“搜索”类型的模型的实例,在这种情况下,多个控制器“搜索”非常有意义。

但是,如果它是一个没有多个模型的控制器,那么可能不是。在这种情况下,您无需使用resource :search定义路线,只需使用get 'search/create'告诉路由器回答“搜索/创建”“搜索”中的“创建”操作控制器。