Передача идентификатора в действие form_for - PullRequest
2 голосов
/ 03 января 2012

У меня есть форма для обновления атрибута модели - я не хочу, чтобы он переходил к стандартному действию обновления, я хочу, чтобы он переходил к другому действию.

<% for car in @cars %>
 <%= form_for car, :url => { :action => "custom_action/#{car.id}" } do |f| -%>

Это даетследующая ошибка -

No route matches {:action=>"custom_action/1", :controller=>"cars"}

Однако, если я посещаю URL - custom_action / 1 - я не получаю ошибку маршрутизации.

Есть идеи, почему я не могу этого сделать?

Ответы [ 2 ]

4 голосов
/ 03 января 2012

В дополнение к тому, что Фредерик Ченг сказал о GET vs POST vs PUT, я думаю, что ваш код в целом может быть неправильным.* Я не думаю, что это хорошая идея, и, вероятно, причинит вам боль.Я предлагаю взглянуть на Руководство по маршрутизации Ruby on Rails , чтобы понять, как это сделать правильно.(Маршрутизация - это тема, в которой мне всегда нужно обращаться к руководству.)

При правильных маршрутах ваш код должен выглядеть примерно так:

form_for car, custom_action_car_path(car) do |f|

Что будет легче изменить в будущемесли / когда вы реорганизуете свое приложение.

1 голос
/ 03 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...