Рельсы единственного ресурса еще во множественном числе?

У меня есть поисковый маршрут, который я хотел бы сделать единичным, но когда я указываю особый маршрут, он все равно создает множественные маршруты контроллеров, это так и должно быть?

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 ответа

Решение

Да, так и должно быть. Цитата из руководства Rails по маршрутизации:

Поскольку может потребоваться использовать один и тот же контроллер для единственного маршрута (/account) и множественного маршрута (/ account /45), ресурсы единственного числа отображаются на несколько контроллеров.

http://edgeguides.rubyonrails.org/routing.html

Вы можете исправить это, установив множественное число "search" как неисчислимое, так в config/initializers/inflections.rb

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

Теперь это должно позволить использовать поиск только

Вы хотите, чтобы для создания был создан только один маршрут?

Если так:

resource :search, :only => :create

Тот факт, что контроллер для ресурса REST называется search_controller, является соглашением (которое можно изменить, принудительно задав имя контроллера в маршруте с помощью resource :search, :only => :create, :controller => :search, но оно того не стоит...).

Поиск действительно ресурс? Если это так, то то, что вы создаете, является экземпляром модели с типом "поиск", и в этом случае множественный контроллер "ищет" имеет смысл.

Однако, если это контроллер, который не имеет нескольких моделей, то, возможно, нет. В этом случае вам не нужно определять маршруты с resource :search Вы можете просто использовать get 'search/create' попросить маршрутизатор ответить "поиск / создание" на действие "создать" в вашем контроллере "поиск".

Другие вопросы по тегам