Рельсы особый ресурс все еще множественного числа?
У меня есть маршрут поиска, который я хотел бы сделать сингулярным, но когда я укажу особый маршрут, он все еще выполняет множественные маршруты контроллера, так ли это должно быть?
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
Ответы
Ответ 1
Да, как это должно быть. Цитата из Rails Guide по маршрутизации:
Поскольку вы можете использовать один и тот же контроллер для единственного маршрута (/account) и множественный маршрут (/accounts/45), карта особых ресурсов к множественным контроллерам.
http://edgeguides.rubyonrails.org/routing.html#singular-resources
Ответ 2
Вы можете исправить это, установив множественное число "поиск", чтобы быть несчетным, поэтому в config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable %w( search )
end
Теперь это позволит использовать поиск только
Ответ 3
Вы хотите, чтобы для создания был создан только один маршрут?
Если да:
resource :search, :only => :create
Тот факт, что контроллер для ресурса REST назван search_controller - это соглашение (которое вы можете изменить, вытеснив имя контроллера на маршруте с помощью resource :search, :only => :create, :controller => :search
, но это не стоит...).
Ответ 4
Является ли поиск действительно ресурсом? Если это так, то то, что вы создаете, является экземпляром модели с типом "поиска", и в этом случае множественный контроллер "ищет" имеет смысл.
Однако, если это контроллер, который не имеет нескольких моделей, то, возможно, нет. В этом случае вам не нужно определять маршруты с помощью resource :search
, вы можете просто использовать get 'search/create'
, чтобы сообщить маршрутизатору ответить "поиск/создание" на действие "создать" в вашем контроллере поиска.