0

注: Routing From the Inside Out と、ルーティングに関する Engine Yard のブログ投稿を読みました。

私はファンタジースポーツリーグを構築しています.7つの基本的な休息操作をサポートするリーグモデルがあり、それらはすべて正常に動作します.

次のroutes.rbを追加しました

  resources :leagues do
    member do
      get :invite
      post :sendem
    end

ファイルの後半に、基本的なアクションのリソース :leagues があります。

ルートをかき集めると、次のことがわかります。

invite_league GET    /leagues/:id/invite(.:format)      {:action=>"invite", :controller=>"leagues"}
sendem_league POST   /leagues/:id/sendem(.:format)      {:action=>"sendem", :controller=>"leagues"}

これは私が期待するものです。リーグ コントローラには 2 つの関数があります。電子メール アドレスを収集するためのフォームを作成する「invite」と、メーラーを呼び出して実際に招待状を送信する「sendem」です。

/league/:id/invite の get は実際にフォームを生成します。私が使用しているフォームタグは次のようになります。

<%= form_tag(sendem_league_path, :method => "post") do %>

それでも、レンダリングされる HTML は次のようになります。

<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">

したがって、送信時に完全に間違った PUT が生成されます。( sendem 関数に投稿する必要があります。) routes ファイルへの私の変更は、一般的なリソースの :leagues 行のに表示されるため、優先度が高くなるはずです。

私が見逃した非常に単純なものがあると確信していますが、アイデアがありません。(そして髪)。

4

2 に答える 2

0

ARGH 上部のフォーム処理エラー コード (@league のフォーム) により、編集用にページに 2 番目のフォームが作成されました.... (簡潔にするために、上記のコード スニペットは省略されています)。元のコードは、他のコードがコメントアウトされているため、期待どおりに動作するようです。私が正しい方向に進んでいると確信させてくれた vladdruzh と、レンダリングされた HTML を上から下に読むように考えさせてくれた Salil に感謝します。

于 2012-06-17T14:25:34.383 に答える
0

リソースの操作に form_tag を使用しないでください。form_for を使用する必要があります。フォーム ヘルパー ガイド- セクション 2「モデル オブジェクトの取り扱い」を確認してください。モデル オブジェクトに POST または PUT を使用するかどうかを推測します。たとえば、モデル オブジェクトが新しい場合は、"resources" の URL に post を使用します。すでに存在するデータベース エンティティである場合は、その「リソース」の URL に PUT を使用します。

于 2012-06-17T04:30:39.460 に答える