2012-04-05 132 views
3

我試圖返回redirect_to並傳遞額外的參數。這裏是我在我的控制器中有:使用redirect_to並傳遞額外參數

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

這是重定向到URL正確,但你沒有被傳遞。想法?

+0

是您的目標(omiauth)外部網址? – Deradon 2012-04-05 23:50:32

+0

不,它不是一個外部URL – AnApprentice 2012-04-05 23:55:11

回答

5

env['omniauth.origin'] a String?如果是這樣,我認爲這不可行。您可以嘗試添加參數爲:

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

或其他相關內容。

1

添加路徑它在你的路線,並通過HelloWorld作爲參數

redirect_to(route_in_file_path('helloworld')) 
4

redirect_to最後調用url_for,如果參數url_for是一個字符串,它只是返回字符串不變。它忽略了其他選項。

我建議乾脆使用Rails的Hash#to_query方法:

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

我應該注意,如果'env ['omniauth.origin']'還沒有包含查詢字符串,這將只會生成一個有效的URL。 – Brandan 2012-04-06 03:07:32

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")