рельсы единственного ресурса еще во множественном числе? - PullRequest
35 голосов
/ 04 августа 2011

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

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 ]

34 голосов
/ 04 августа 2011

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

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

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

22 голосов
/ 04 августа 2011

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

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

Теперь следует разрешить поиск только

6 голосов
/ 04 августа 2011

Хотите ли вы создать только один маршрут для создания?

Если так:

resource :search, :only => :create

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

5 голосов
/ 04 августа 2011

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

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

...