1

次のネストされたリソースがあります。

  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)

ここで、ボタンをクリックすると、Rails が POST リクエストを生成するため、エラーが発生します。

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

更新すると (GET 要求)、ページが正しく表示されます。

この誤ったルーティングは、accept と reject という 2 つのアクションを追加した場合にのみ発生すると思います。これはたまたま POST アクションです。

Rails のバグですか、それとも私のせいですか? このエラーを防ぐにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

2

button_toヘルパーは、デフォルトで指定したURL( "/ Listings / 2 / features / new")にPOSTリクエストを送信するフォームを作成します。

指定したルーティングでは、/newへのPOSTリクエストを処理するためのルートは生成されません。「rakeroutes」タスクを実行することにより、生成されたルートとそれらが応答する動詞を検査できます。

フォームにリンクするだけの場合は、「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の作成アクションにルーティングされます。)

于 2011-12-29T16:29:37.567 に答える