2012-04-05 14 views
3

私はredirect_toを返して余分なパラメータを渡そうとしています。私のコントローラには次のものがあります:redirect_toを使用して余分なパラメータを渡す

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

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

+0

は、あなたのターゲットであるが(omiauth)外部のURL? – Deradon

+0

いいえ外部URLではない – AnApprentice

答えて

5

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

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

またはそのようなもの

1

ルートで、それのためにパスを追加して、パラメータとして

redirect_to(route_in_file_path('helloworld')) 
4

redirect_toをHelloWorldのを渡すには、最終的にurl_forを呼び出し、url_forへの引数が文字列であれば、それは単にそのままその文字列を返します。他のオプションは無視されます。

私は単にRailsののHash#to_query方法使用することをお勧めしたい:

redirect_to([env['omniauth.origin'], '?', params.to_query].join) 
+1

'env ['omniauth.origin']'にまだクエリ文字列が含まれていない場合にのみ有効なURLを生成することに注意してください。 – Brandan

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") 
関連する問題