【问题标题】:Rails - appending query parameters to existing URLRails - 将查询参数附加到现有 URL
【发布时间】:2011-05-10 13:27:54
【问题描述】:

我有一个称为redirect back 或default 的应用程序控制器方法,用于将用户重定向到他们登录后请求的页面

def redirect_back_or_default(default)
  redirect_to(session[:return_to] || default)      
  session[:return_to] = nil
end

我希望能够有选择地向 url 添加 URL 参数(用于某些分析跟踪),但不确定最佳方法。我想把方法签名改成这个

def redirect_back_or_default(default, params=nil)
  redirect_to(session[:return_to] || default)      
  session[:return_to] = nil
end

并以某种方式将参数附加到现有 URL。是否有标准的 ruby​​ 或 ROR 方法来执行此操作?我显然可以使用正则表达式强力检查是否有查询字符串作为 URL 的一部分并手动构建查询字符串,但我希望有一种更简单的标准方法。

【问题讨论】:

    标签: ruby ruby-on-rails-3


    【解决方案1】:

    来自here

    使用redirect_to 传递参数 您只需添加它们。喜欢...

     redirect_to :controller => 'another', :action => 'def', :param1 => 'some', :param2 => 'thing', :param => 'else'
    

    【讨论】:

    • 这不起作用,因为此时 URL 已经构建好了
    • 我试过redirect_to( (session[:return_to] || default), :test_param=>1 )
    • 好的,所以session[:return_to]default 包含完整的网址?
    • 对,因为我在点击需要登录的页面之前保存了他们导航到的请求 uri。然后在登录后他们被重定向到 session[:return_to]。
    • 据我所知,没有内置的方法可以做你想做的事。 The documentation says "以 protocol:// 开头的字符串(如 http://) - 直接作为重定向目标传递。"
    【解决方案2】:

    标准方法

    def redirect_to_back_or_default(default = "/")
      back = case request.env["HTTP_REFERER"]
      when request.fullpath
        default
      when nil
        default
      else
        :back
      end
      redirect_to back
    end
    

    【讨论】:

    • 这仍然无法帮助我在“back”中添加一个额外的参数
    猜你喜欢
    • 2014-11-28
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多