3

redirect_to を返して、追加のパラメーターを渡そうとしています。コントローラーにあるものは次のとおりです。

redirect_to(env['omniauth.origin'], :hello => "hello world")

これは URL に正しくリダイレ​​クトされていますが、hello が渡されていません。アイデア?

4

4 に答える 4

5

env['omniauth.origin']文字列ですか?もしそうなら、私はこれがうまくいくとは思わない。パラメータを次のように追加してみてください。

redirect_to(env['omniauth.origin'] + "?hello=helloworld")

またはその趣旨の何か。

于 2012-04-06T02:18:14.817 に答える
4

redirect_to最終的にはを呼び出しurl_for、toの引数url_forが文字列の場合、その文字列はそのまま返されます。他のオプションは無視されます。

RailsのHash#to_query方法を使用することをお勧めします。

redirect_to([env['omniauth.origin'], '?', params.to_query].join)
于 2012-04-06T02:57:46.620 に答える
1

ルートにそのパスを追加し、パラメーターとして helloworld を渡します

redirect_to(route_in_file_path('helloworld'))
于 2012-04-06T02:30:31.883 に答える
0

ApplicationControllerクラスに関数を追加する

class ApplicationController  < ActionController::Base    
  def update_uri(url, opt={})
    URI(url).tap do |u|
      u.query = [u.query, opt.map{ |k, v| "#{k}=#{URI.encode(v)}" }].
                 compact.join("&")
    end
  end
  helper_method :update_uri # expose the controller method as helper
end

これで、次のことができます。

redirect_to update_uri(env['omniauth.origin'], :hello => "Hello World")
于 2012-04-06T05:08:28.947 に答える