Маршруты Rails, какие ресурсы эквивалентны использованию match? - PullRequest
0 голосов
/ 03 ноября 2011

У меня вопрос по поводу поведения моего routes.rb. Следующий код работает отлично, но это означает, что и GET /noodles, и GET / вернут индекс лапши. Поскольку noodles_path будет использовать /noodles, URL становится излишне длинным, он продолжает появляться.

root :to => 'noodles#index'
match '/new' => 'noodles#new', :as => :new_noodle, :via => [:get]
resources :noodles, :only => [:index, :create, :show]

В попытке удалить GET /noodles я попытался:

root :to => 'noodles#index'
match '/new' => 'noodles#new', :as => :new_noodle, :via => [:get]
resources :noodles, :only => [:create, :show]
match '/' => 'noodles#index', :as => :noodles, :via => [:get]

Кажется, это работает, но как-то нарушает метод :create, потому что у них обоих есть путь noodles, и хотя я указал его :get, только он запутывается (rake routes выглядит иначе, noodles упоминается дважды, тогда как при использовании resources (...) упоминается только один раз). Таким образом, с этими новыми маршрутами невозможно создать новую лапшу.

Как правильно удалить GET /noodles для индекса и установить его на GET /, не нарушая :create?

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

На самом деле, лучше не смешивать нересурсные маршруты с ресурсоемкими, если вам это не нужно. И в этом самом случае, вы не.

root :to => 'noodles#index'
resources :noodles

Это тот, который вам нужен, и у вас будут пути '/' и '/ noodles', которые приведут вас к индексу # noodles, и это то, что вы хотите.

Посмотрите на маршруты рейка, вы создаете что-то безобразное;) Если вы решите изогнуть индексный маршрут из ресурса лапши, как в resources :noodles, :except => :index, вы также избавляетесь от методов noodles_path и noodles_url. Суть в том, что вы можете изменить свое мнение об этом в любое время. Может быть, это будет страница sign_up, возможно, что-то другое, возможно, она не изменится, но вы не хотите терять эту свободу.

0 голосов
/ 03 ноября 2011

Предположим, что лучшим решением было бы использовать root_url вместо noodles_url при попытке добраться до индекса и использовать эти маршруты

root :to => 'noodles#index'
resources :noodles, :except => :index

Так что в основном это просто создает все маршруты, кроме :index, потому что этот маршрут уже существует как root.Тогда в представлениях просто используйте root_url.

...