redirect_to
にパラメータ(ハッシュ)を渡したいのですが、どうすればいいですか?たとえば、次のようにパラメトリックでredirect_toを実行する
hash = { :parm1 => "hi", :parm2 => "hi" }
と私はこのようなURL
/hello
ページにリダイレクトします:あなたがのために/ハローという名前のルートを持っていない場合は
/hello?parm1=hi&parm2=hi
redirect_to
にパラメータ(ハッシュ)を渡したいのですが、どうすればいいですか?たとえば、次のようにパラメトリックでredirect_toを実行する
hash = { :parm1 => "hi", :parm2 => "hi" }
と私はこのようなURL
/hello
ページにリダイレクトします:あなたがのために/ハローという名前のルートを持っていない場合は
/hello?parm1=hi&parm2=hi
は、あなたがハードコーディングする必要がありますあなたはredirect_to
に渡す文字列にパラメータを設定します。
しかし、あなたがhello_path
のようなものを持っていたならば、あなたはそれが必要なすべての値を取得するために解析し
redirect_to hello_path(:param1 => 1, :param2 => 2)
は単純に、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}"
私は、これはそれを行うには非常に基本的な方法かもしれませんが、ちょっと、それはどこかを取得します:)
すでにRailsを使っているので、['to_param'](http://apidock.com/rails/Hash/to_param)メソッドを使うこともできます。 – JacobEvelyn
を最も簡単な方法(それは名前のルートではない場合)になります知っている:
redirect_to "/hello?#{hash.to_param}"
を私が前に、次の関数を使用しました:
def add_query_params(url, params)
parsed_uri = URI(url)
if parsed_uri.query
query_params = URI.decode_www_form(parsed_uri.query)
else
query_params = []
end
params.each_pair do |k, v|
query_params << [k.to_s, v]
end
parsed_uri.query = URI.encode_www_form(query_params)
parsed_uri.to_s
end
使用例:
redirect_to add_query_params("/hello", parm1: 'hi', parm2: 'hi')
これは、URLのparams任意の既存のURLが既に含まれている場合があります保存するという利点があります。
の代わりに:あなたが行うことができます
redirect_to some_params
:
redirect_to url_for(some_params)
あなたはredirect_to
に渡す前にurl_for
とURLへのparamsを回すので、あなたがredirect_to
を渡すことはされて終わるいますredirect_toがリダイレクトするのがうれしい文字列としてのURL。
よく御座います。:なぜredirect_to
がparamsの使用を拒否したのか分かりません。以前はparamsを使用していました。いくつかの点で、誰かがそれを禁止するためにRailsに何かを追加しました。セキュリティ上の理由があると思われる場合は、これらのセキュリティ上の理由により、手動でredirect_to url_for(p)
を実行してもセキュリティ上の問題が発生する可能性があります。しかし、私はここで何が起きているのかを説明する書類はまだ見つけられていません。
更新:私は、セキュリティ警告を見つけたが、まだそれを消化していない:https://github.com/rails/rails/pull/16170
あなたも試してくださいましたか? – austinbv
どのコントローラとアクションが/ helloへのルートですか? – James
あなたは単にこれを行うことはできませんか? redirect_to 'path'、:parm1 => "hi"、:parm2 => "hi" – AyJay