В чем разница между методом спокойного маршрута для получения индекса и созданием нового объекта? - PullRequest
0 голосов
/ 06 апреля 2010

В соответствии с маршрутами рейка, для получения индекса объектов используется тот же путь, что и для создания нового объекта:

cars GET    /cars(.:format)    {:controller=>"plugs", :what=>"car", :action=>"index"}
     POST   /cars(.:format)    {:controller=>"plugs", :what=>"car", :action=>"create"}

Очевидно, что глагол HTTP - это то, что различает их. Я хочу "создать" версию метода cars_path, а не версию "index". У меня вопрос, какой метод маршрута вы используете, чтобы выбрать тот, который вы хотите? Я говорю огурцу, какой путь сгенерировать с этим:

when /the car plug preview page for "(.+)"/
  cars_path(:action => :create, :method => :post)

... но он всегда выбирает действие «index», а не «create». Я перепробовал множество комбинаций для аргумента хеша, следующего за cars_path, и ничто не меняет его при выборе «index» вместо «create».

Я получу ошибку, подобную этой:

cars_url failed to generate from {:controller=>"plugs", :method=>:post, 
:what=>"car", :action=>"create"}, expected: {:controller=>"plugs", :what=>"car",
:action=>"index"}, diff: {:method=>:post, :action=>"index"} 
(ActionController::RoutingError) 

Это кажется очень простым вопросом, но мне не повезло, гуглить, поэтому мог бы воспользоваться некоторыми советами. Благодарю.

Ответы [ 2 ]

3 голосов
/ 06 апреля 2010

Поскольку URL-адрес одинаков для обоих действий, вы можете использовать cars_path (без аргументов) в обоих случаях. Вам просто нужно убедиться, что method -параметр формы установлен в :post. Вы не можете установить метод с помощью URL-адреса, вам нужно установить его для формы (и вы не можете достичь действия создания, используя ссылку, вам нужно использовать форму).

0 голосов
/ 07 апреля 2010

Разница в том, что к одному обращаются при выполнении POST, к другому - при выполнении GET. Ввод URL-адреса в браузер или (обычно) нажатие на ссылку является эквивалентом действия GET. Действия POST обычно выполняются путем отправки формы.

...