将查询字符串附加到url

MIc*_*hel 19 ruby ruby-on-rails ruby-on-rails-3

我有一个回调url字符串params[:callback],我需要附加一个查询字符串"&result=true"并重定向用户.我发现这样做的更好方法是使用,addressable但我认为代码对于这样的任务来说太大了,特别是当我们谈论ruby时:

callback = Addressable::URI.parse(params[:callback])
query = callback.query_values
query[:result] = 'true'
callback.query_values = query

redirect_to callback.to_s
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式获得与此片段相同的结果?

Mau*_*ähä 10

我不想对这个主题进行更新,因为任何解决方案都不适合我.

原因是,如果实际的url没有现有的查询值,它似乎会callback.query_values返回Nil.

因此,如果你有网址,如:http://www.foo.comhttp://www.foo.com?bar=1你应该使用下面的代码:

url = "http://www.foo.com" # or params[:callback] obviously. :)

callback = Addressable::URI.parse(url)
callback.query_values = (callback.query_values || {}).merge({
  result: true
})

redirect_to callback.to_s
Run Code Online (Sandbox Code Playgroud)

干杯.


小智 9

  • 如果你不需要任何URL验证,你可以这样做(看起来有点脏):
    
    url = params[:callback]
    redirect_to url + (url.include?('?') ? '&' : '?') + 'result=true'
    
    Run Code Online (Sandbox Code Playgroud)
  • 否则你必须使用标准库中的一些外部库(如Addressable)或URI模块