2009-10-12 17 views
10

これは素晴らしい作品:Rails:複数のパラメータをform_forに渡す?

- form_for @user, :url => { :action => :create, :type => @type } do |f| ... 

戻り/users/(id)?type=type

しかし、別のビューでは、私はURL文字列に2つのパラメータを渡す必要があり、これは動作しません:

- form_for @user, :url => { :action => :update, :type => @type, :this => @currently_editing } do |f| ... 

戻り/users/(id)?this=currently_editing

私も試しました:

- form_for @user, :url => { :action => :update, :params = params.merge({:this => @currently_editing, :type = @type})} do |f| ... 

...運がない(エラー:GETリクエストのみ許可)。 /users/(id)?this=currently_editing&type=type

思考:それはこれを返送するための

は私がしたいことはありますか?

答えて

25

なぜURL文字列に渡す必要がありますか?フォームの隠しフィールドとして追加するだけではどうですか?ほとんどの場合、POSTで変数をそのまま渡すべきです。このようなURLのオプション:

form_for @user, :url => { :action => :update }, :type => @type, :this => @currently_editing do |f| 
+0

ポストモデルに含まれていないパラメータの場合、非表示のフィールドは機能しますか? – Blake

+0

隠しフィールドをフォームに追加することはできますが、form_forヘルパーを使用する必要はありません。 – scottd

-3

私はあなたが希望クエリ文字列は、外の属性を移動することがあると思う

<% form_for @user, :url => user_path(@user.id, :type => @type, :this => @currently_editing), :method => :put do |f| -%> 

:method => :putトリガRESTfulルートを使用している場合の更新アクション。

+0

そのようには動作しません。 – Jim

+3

右...それはそのようには動作しません。 – rswolff

1

私は隠しフィールドを使用しますが、これは動作するはずです:

0

これを試してください。

このように複数のパラメータを渡すことができます。

- form_for @user, :url => xxx_yyy_path(:param1 => value1, :params2 => value2, ......) do |f| ...