我有一个回调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
有没有一种更优雅的方法来获得与此代码片段相同的结果?
发布于 2014-11-27 16:51:10
我不想更新这个话题,因为任何解决方案都不适用于我。
原因是,如果实际的url没有现有的查询值,那么callback.query_values
似乎会返回Nil
。
因此,如果您有urls,如:http://www.foo.com
和http://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
干杯。
发布于 2011-07-21 01:59:21
callback.query_values = callback.query_values.merge({"result" => "true"})
发布于 2012-02-22 21:55:55
我认为你已经非常接近最优了。你可以删掉一两行代码,但这并不能给你带来任何好处。
callback = Addressable::URI.parse(params[:callback])
callback.query_values = callback.query_values.merge {:results => 'true' }
redirect_to callback.to_s
如果回调总是在您的应用程序内部,那么您可能有其他一些具有不同酷度的选项,但是您没有指定是否是这种情况。
https://stackoverflow.com/questions/6559708
复制相似问题