rails redirect_toでパラメーターを渡す


202

railsのredirect_toでパラメーターをどのように渡しますか?私はこれを使用してidを渡すことができることを知っています:

redirect_to :action => action_name,:id => 3

いくつかのフォームデータなどの追加のパラメーターを渡したい場合、それをどのように実現しますか?

編集:

Ruby 2構文の場合、上記のスニペットを次のように更新する必要があります。

redirect_to action: action_name, id: 3

3
実際に何を達成しようとしていますか?セッションでデータを保存することを検討しましたか?
マイケル・セプコット2009

1
あなたが求めていることは不可能です-リダイレクトを行う場合、それはリダイレクト先のGETリクエストでなければならないので、パラメーターは常にユーザーに表示されます。代わりに、セッションにデータを保存する必要があります。
GregT 2013

回答:


174

それらをオプションに追加するだけです:

redirect_to controller: 'thing', action: 'edit', id: 3, something: 'else'

譲る /thing/3/edit?something=else


22
POSTでリダイレクトすることはできません。3xx定義の下のHTTP 1.1ドキュメントから:「必要なアクションは、2番目のリクエストで使用されるメソッドがGETまたはHEADの場合に限り、ユーザーとの対話なしにユーザーエージェントによって実行される場合があります。」あなたが本当に達成しようとしていることを拡張してください。そうすれば、私たちはおそらくあなたを正しい方向に進めることができます。
jdl 2009

こんにちはあなたの応答をたくさんありがとう。私はウェブ開発の初心者です。アクションを呼び出すためのさまざまな方法を知りたいと思っています。あなたの応答は私の疑問の多くを明らかにしました。ありがとうございました:))
markiv

いいぞ。私はこれを1時間以来探していました。

86

RESTfulリソースを使用している場合は、次のことができます。

redirect_to action_name_resource_path(resource_object, param_1: 'value_1', param_2: 'value_2')

or
#You can also use the object_id instead of the object
redirect_to action_name_resource_path(resource_object_id, param_1: 'value_1', param_2: 'value_2')

or
#if its a collection action like index, you can omit the id as follows
redirect_to action_name_resource_path(param_1: 'value_1', param_2: 'value_2')

#An example with nested resource is as follows:
redirect_to edit_user_project_path(@user, @project, param_1: 'value_1', param_2: 'value_2')

46

たとえば、home#actionに送信されたフォームデータがある場合、パラメーターを維持しながらそれらをhouse#actにリダイレクトしたい場合、これを行うことができます

redirect_to act_house_path(request.parameters)


1
これと新しいパラメータをどのように組み合わせるか知っていますか?ie request.parameters、(または+):this =>:that
Chris Edwards

5
マージ方法を使用できます。例:redirect_to act_house_path(request.parameters.merge(key: "value"))
GregT 2013

3
また、合併後の不要のparamsを除外するための方法を除いて使用することができます:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
IO MR

39

flashパラメータを使用して、任意のオブジェクトをテンプレートに渡すことができます。

 redirect_to :back, flash: {new_solution_errors: solution.errors}

そして、ハッシュを介してテンプレートでそれらにアクセスします。

<% flash[:new_solution_errors].each do |err| %>

63
これは悪い習慣です。このメソッドは、ユーザーメッセージング用のflashオブジェクトを誤用します。セッションに任意のパラメータを格納し、完了したらそれらのパラメータをセッションから消去する方が良いでしょう。
GregT 2013


7
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id

6
もう少し説明してください。コード例だけでは十分ではありません。
simonmenke 2012年

7

追加のURLパラメーター(コントローラー、アクション、IDなどではない)を渡す方法を探している場合、これを行うための堅牢な方法を次に示します。

object_path(@object, params: request.query_parameters)

これは、utmパラメータまたは失わない他の追加のパラメータを渡します


4

routes.rb

 match 'controller_name/action_name' => 'controller_name#action_name', via: [:get, :post], :as => :abc

パラメータでリダイレクトしたいコントローラは以下のとおりです。

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.