2011-12-29 16 views
1

ためのPOSTリクエストを生成します。私のリスト/ show.html.hamlでRailsのルートは、私は次のネストされたリソースを持っているネストされたリソースの新しいアクション

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

を、私はとき、今

= 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リクエスト)した場合、正確にys。

この誤ったルーティングは、私が2つの追加のアクションを追加した場合にのみ発生すると考えられます。受け入れと拒否はPOSTアクションです。

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

ありがとうございます。

答えて

2

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

指定したルーティングは、/ newへのPOST要求を処理するルートを生成しません。 "rake routes"タスクを実行することによって、生成されたルートとそれらが応答する動詞を検査できます。

フォームにリンクするだけの場合は、「button_to」を「link_to」に変更し、CSSを追加して美学を追加します。 (この

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

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

(このGETはあなたのOfferControllerの新しいアクションへのルートです)

は、あなたが実際にデータをPOSTするために探しているなら、あなたはおそらくにご使用を変更する必要がありますPOSTはOfferControllerの作成アクションにルーティングされます)。

+0

ありがとうございます。あなたのヒントから、私は:method =>:button_toに追加することができることに気付きました。できます。 – AdamNYC

+0

問題ありません。うん、それも動作しますが、それが検索フォームや何かでない限り、GETを実行するためにフォーム送信を使用すると、そのソリューションを意図的に残してしまったようです。 – miked

関連する問題