Rails字符串替换URL参数

Tom*_*ond 1 ruby ruby-on-rails

假设我有一个字符串:

url = "https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}"
Run Code Online (Sandbox Code Playgroud)

我想更新cmp_id=344要说的cmp_id=44553.实现这一目标的最佳方法是什么?我不能gsub per say因为我不知道cmp_id可能是什么,只是它将是字符串中的URL参数.

好像我想做点什么

uri = URI.parse(url)
params = CGI.parse(uri.query)
Run Code Online (Sandbox Code Playgroud)

但是,如何重新构建字符串交换cmp_id参数44553

谢谢!

Sim*_*tti 15

如果您正在处理Web应用程序(和/或标签似乎表明的Rails),那么您当然可以使用Rack.Rack::Utils有解析和构建查询的方法.

url = "https://example.com/user/tr_auth.php?key=34432&cmp_id=344&tr_id={user_id}"
uri = URI.parse(url)

query = Rack::Utils.parse_query(uri.query)
# => {"key"=>"34432", "cmp_id"=>"344", "tr_id"=>"{user_id}"}

# Replace the value
query["cmp_id"] = 44553

uri.query = Rack::Utils.build_query(query)
uri.to_s
# => "https://example.com/user/tr_auth.php?key=34432&cmp_id=44553&tr_id=%7Buser_id%7D"
Run Code Online (Sandbox Code Playgroud)

另请注意,默认情况下,Rack会转义查询.