使用redirect_to并传递额外的参数

时间:2012-04-05 23:40:39

标签: ruby-on-rails ruby-on-rails-3

我试图返回redirect_to并传递额外的参数。这是我在控制器中的内容:

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

这是正确地重定向到URL但是没有传递hello。想法?

4 个答案:

答案 0 :(得分:5)

env['omniauth.origin']是字符串吗?如果是这样,我认为这不起作用。您可以尝试将参数添加为:

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

或者那种效果。

答案 1 :(得分:4)

redirect_to最终调用url_for,如果url_for的参数是一个String,它只是返回该字符串未触及。它忽略了任何其他选择。

我建议只使用Rails的Hash#to_query方法:

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

答案 2 :(得分:1)

在路线中为其添加路径,并将helloworld作为参数传递

redirect_to(route_in_file_path('helloworld'))

答案 3 :(得分: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")