Рельсы единственного ресурса еще во множественном числе?
У меня есть поисковый маршрут, который я хотел бы сделать единичным, но когда я указываю особый маршрут, он все равно создает множественные маршруты контроллеров, это так и должно быть?
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), ресурсы единственного числа отображаются на несколько контроллеров.
Вы можете исправить это, установив множественное число "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'
попросить маршрутизатор ответить "поиск / создание" на действие "создать" в вашем контроллере "поиск".