如何在HTTParty中传递作为URL路径部分的参数?
解决HTTParty请求路径参数未正确替换的问题
你遇到的核心问题是混淆了路径参数和查询参数的用法,导致URL里的:make占位符没有被替换成实际值"honda",反而被服务器当成了参数本身。HTTParty的:query选项是用来添加URL末尾的?key=value格式查询参数的,并不会自动替换路径里的占位符。
正确的解决方法
你需要先把URL中的:make占位符替换为实际参数值,再发起请求,这里有两种简单的实现方式:
方法1:Ruby字符串插值(最直接)
make = "honda" # 用字符串插值替换路径里的:make占位符 url = "http://localhost:3000/api/v1/new_car/car_makes/#{make}/detail" # 发起请求,无需再传:query参数(如果有其他查询参数可以补充) response = HTTParty.get(url, headers: @headers)
方法2:字符串替换方法
如果你的基础URL是预先定义好的,也可以用gsub方法替换占位符:
base_url = "http://localhost:3000/api/v1/new_car/car_makes/:make/detail" make = "honda" # 替换:make为实际值 url = base_url.gsub(":make", make) response = HTTParty.get(url, headers: @headers)
为什么原来的写法不行?
你原来的代码中,URL里的:make是静态字符串,HTTParty不会自动识别并替换它。加上:query => query后,实际发起的请求URL是:
http://localhost:3000/api/v1/new_car/car_makes/:make/detail?make=honda
这时候服务器端如果是从路径参数中取make,拿到的就是路径里的:make字符串;而查询参数里的make=honda可能没有被你的后端逻辑处理,所以params[:make]才会返回nil。
按照上面的方法修改后,请求URL会变成正确的:
http://localhost:3000/api/v1/new_car/car_makes/honda/detail
服务器端就能正确从路径参数中拿到make的值"honda"了。
内容的提问来源于stack exchange,提问作者Haseeb Ahmad
相关产品推荐
相关产品推荐

