这是什么
- 我没有找到在Ruby中重写URL的查询参数的方法,所以我把它放在一起。
- 我会实现的,喜欢的话请使用
在 Ruby 中重写 URL 查询参数时的问题
在 Ruby 中重写 URL 查询参数时,经常使用URI
模块。
例子
uri = URI('https://example.com')
uri.query = 'a=1'
uri.to_s #=> "https://example.com?a=1"
然而,这会导致以下问题。
如果查询参数已经给出,它将被覆盖
如果查询参数从一开始就给出,这样的实现会覆盖它,信息会丢失。
例子
uri = URI('https://example.com?b=1')
uri.query = 'a=1'
uri.to_s #=> "https://example.com?a=1"
如果与你要给出的查询参数相同的参数已经给出,则会重复
为了解决覆盖问题,我们假设实现如下。
例子
uri = URI('https://example.com?b=1')
uri.query += '&a=1'
uri.to_s #=> "https://example.com?b=1&a=1"
尽管这似乎已经解决了问题,但这种实现又引发了另一个问题。
当与您要提供的查询参数相同的参数已经给出时,就会出现问题。
最初,更新现有查询参数的值是正确的,但它会被复制。
例子
uri = URI('https://example.com?a=2')
uri.query += '&a=1'
uri.to_s #=> "https://example.com?a=2&a=1"
用 Ruby 很好地重写 URL 查询参数
考虑在以下条件下要在 Ruby 中重写 URL 的查询参数的情况。
- 保持现有查询参数不变
- 如果您要设置的新查询参数已经给出,则更新而不是添加
下面的方法实现了这样的实现。
def create_link_url(url)
uri = URI(url)
query = URI.decode_www_form(uri.query.to_s).to_h
query['a'] = '1'
uri.query = URI.encode_www_form(query)
uri.to_s
end
通过这样的实现,查询参数的 URL 可以很好地重写。
原创声明:本文系作者授权九品源码发表,未经许可,不得转载;
原文地址:https://www.19jp.com/show-308622503.html