web-dev-qa-db-ja.com

Rails redirect_to with params

パラメータ(ハッシュ)をredirect_toに渡したいのですが、どうすればよいですか?例えば:

hash = { :parm1 => "hi", :parm2 => "hi" }

/helloページにリダイレクトしたい

このようなURL:/hello?parm1=hi&parm2=hi

15
ygnhzeus

/ helloの名前付きルートがない場合は、パラメータを_redirect_to_に渡す文字列にハードコードする必要があります。

ただし、_hello_path_のようなものがある場合は、redirect_to hello_path(:param1 => 1, :param2 => 2)を使用できます。

24
James

の代わりに:

_ redirect_to some_params
_

できるよ:

_ redirect_to url_for(some_params)
_

_url_for_に渡す前にパラメータを_redirect_to_のURLに変換しているので、_redirect_to_に渡すものは最終的に文字列としてのURLになり、redirect_toはこのURLにリダイレクトできます。 。

よく注意してください:_redirect_to_がパラメータの使用を拒否する理由がわかりません。以前は、paramsを喜んで使用していました。ある時点で、誰かがRailsに何かを追加して、それを禁止しました。そうすることにはセキュリティ上の理由があるのではないかと思われます。もしそうなら、これらのセキュリティ上の理由は、手動でredirect_to url_for(p)にはセキュリティへの影響もありますが、ここで何が起こっているのかを説明するドキュメントはまだ見つかりません。

update:セキュリティ警告を見つけましたが、まだ消化していません: https://github.com/Rails/ rails/pull/1617

6
jrochkind

最も簡単な方法(名前付きルートでない場合)は次のとおりです。

redirect_to "/hello?#{hash.to_param}"

参照: http://apidock.com/Rails/Hash/to_param

3
JacobEvelyn

単純に、ハッシュをURLの引数に渡し、コードでそれを解析して、必要なすべての値を取得します。

param_arr = []
hash.each do |key , val|
  param_arr << "#{key}=#{val}"
end
params_str = param_arr.join("&")

redirect_to "http://somesite.com/somepage?#{params_str}"

私はこれがそれを行うための非常に基本的な方法かもしれないことを知っています、しかしねえ、それはあなたをどこかに連れて行くでしょう:)

0
Aghyad