パラメータ(ハッシュ)をredirect_to
に渡したいのですが、どうすればよいですか?例えば:
hash = { :parm1 => "hi", :parm2 => "hi" }
/hello
ページにリダイレクトしたい
このようなURL:/hello?parm1=hi&parm2=hi
/ helloの名前付きルートがない場合は、パラメータを_redirect_to
_に渡す文字列にハードコードする必要があります。
ただし、_hello_path
_のようなものがある場合は、redirect_to hello_path(:param1 => 1, :param2 => 2)
を使用できます。
の代わりに:
_ 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
最も簡単な方法(名前付きルートでない場合)は次のとおりです。
redirect_to "/hello?#{hash.to_param}"
単純に、ハッシュを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}"
私はこれがそれを行うための非常に基本的な方法かもしれないことを知っています、しかしねえ、それはあなたをどこかに連れて行くでしょう:)