3

「 form_tagで複数のパラメータを渡す」の質問は、form_tag内でパラメータを渡す方法に関する情報を提供しますが、投稿者は最終的に、上記の目的を達成するための別の手段を追求することを決定しました(特に非表示のフォームフィールドを使用)。

次のようなビューでコード行を使用しようとした場合:

form_tag(movies_path({:foo = "bar"}), {:id => "ratings_form", :method => :get}) do

RoRは'foo'の値をコントローラーで使用できるようにしないようです。そのようなシナリオでパスの一部としてパラメーターを渡すために使用する必要がある別の構文はありますか?

URLの一部としてパラメーターを渡したい場合は、そのようなアプローチが正しいと思います(実際、生成されたHTMLは、結果の<form>タグにaction="/movies?foo=bar"ステートメントが含まれているため、同じ量を示します)...しかし、コントローラーは次のように評価しparams[:foo]ます。''そうではありませんbarか?)

4

2 に答える 2

2

ここには2つの基本的な問題が働いていると思います...

1 つ目は、それ自体を渡す実際のパラメーターです。この仕様GETでは、フォーム データ セットを URI に追加するPOSTメソッドと、フォーム データ セットをフォームのボディに含めるメソッドを指定します。フォームを送信すると、それがリクエスト (指定したとおり) であり、URL パラメーターが指定されている場合でも、フォーム フィールドからパラメーターが生成GETされます (指定された URL パラメーターは URI の一部ではありません)。検索フォームのように「リンク可能な」状態が必要でない限り、フォームの送信には を使用することをお勧めしますPOST

私が見ているように、2番目の問題はかなり一般的です。Rails ルーティング システムは、多くの人にとって最初は理解しにくいものです。これは、routes.rb ファイルmovies_pathの対応する行からのものであると仮定します。resources :moviesその場合、ルートは URL で情報を渡すように設定されていません/movies。またmovie_path、URL 経由でコントローラに情報を渡すように設定された もあります。一般的な使用法は、リソースがモデリングしているオブジェクトのタイプのインスタンスを引数として使用することですmovie_path(@movie)。このタイプの使用法はto_params、渡されたオブジェクトで実行され、デフォルトではオブジェクトの ID が返されます (ただし、簡単にオーバーライドできます)。これにより、params[:id]コントローラで利用可能です。リソースに依存しない任意の情報を URL の一部として送信し、コントローラーで使用できるようにする場合は、次のようにカスタム ルートを定義する必要があります。

match '/movies/:foo' => 'movies#index', :as => :movies

params[:foo] == 'bar'次のように使用すると、コントローラーで作成されます。

movies_path('bar')

とにかく、これが役に立てば幸いです。幸運を祈ります。

于 2012-11-08T04:38:35.593 に答える
0

隠しフィールドを追加するだけではいけませんか?

hidden_field_tag 'foo', 'bar'
于 2012-11-07T01:46:55.373 に答える