Маршруты Rails генерируют запрос Post для действия New во вложенных ресурсах - PullRequest
1 голос
/ 29 декабря 2011

У меня есть следующие вложенные ресурсы:

  resources :listings do
    resources :offers do
     member do
       put "accept"
       put "reject"
     end
   end
 end

В моих списках / show.html.haml у меня есть

= button_to "Make Offer", new_listing_offer_path(@listing)

Теперь, когда я нажимаю кнопку, рельсы генерируют запрос POST, и, таким образом, появляется ошибка:

Started POST "/listings/2/offers/new" for 127.0.0.1 
ActionController::RoutingError (No route matches "/listings/2/offers/new"):

Если я обновляю (запрос GET), то страница отображается правильно.

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

Это ошибка в Rails или это моя вина? Как я должен предотвратить эту ошибку?

Спасибо.

1 Ответ

2 голосов
/ 29 декабря 2011

Помощник button_to создает для вас форму, которая по умолчанию отправляет запрос POST на указанный вами URL-адрес ("/ lists / 2 / offer / new").

Указанная вами маршрутизация не будет генерировать маршрут для обработки запроса POST к / new.Вы можете проверить ваши сгенерированные маршруты и глаголы, на которые они будут реагировать, запустив задачу "rake маршруты".

Если вы ищете просто ссылку на форму, измените «button_to» на «link_to» и добавьте CSS для эстетики.

= link_to "Make Offer", new_listing_offer_path(@listing)

(этот GET будет перенаправлять на новое действие вашего OfferController)

Если вы ищете данные POST, вам, вероятно, придется изменить свое использование на:

= button_to "Make Offer", listing_offers_path(@listing)

(этот POST будет перенаправлять действие создания вашего OfferController.)

...