44

我有一个搜索路由,我想将其设为单数,但是当我指定单数路由时,它仍然会生成复数控制器路由,这是应该的吗?

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"

我只是想知道将来我是否还应该保持控制器的复数形式?导轨 3.0.9

4

4 回答 4

43

是的,这就是它应该的样子。引用 Rails 路由指南:

因为您可能希望对单数路由 (/account) 和复数路由 (/accounts/45) 使用相同的控制器,所以单数资源映射到复数控制器。

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

于 2011-08-04T10:24:49.843 回答
24

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

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

这现在应该只允许使用搜索

于 2011-08-04T11:01:15.143 回答
6

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

如果是这样的话:

resource :search, :only => :create

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

于 2011-08-04T10:28:14.613 回答
6

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

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

于 2011-08-04T11:03:57.867 回答