我正在使用GET API,当前将数组作为字符串传递:
def fetch_details ids
url = "#{url}/api/v1/get-info?ids=#{ids.join(',')}"
response = Net::HTTP.get_response(URI.parse(URI.encode(url)))
if response.code.to_i == 200
return Oj.load(response.body)
else
return {}
end
end
在服务器端,我正在从此方法中提取ID:
def self.get_details(ids)
ids = ids.split(",").map {|x| x.gsub( " ", "")}
end
对于每个ID,我要发送一个UUID数组:
ids = [100,21,301]
uuids= {["abc","bca"],["Xyz"],["pqr","345"]}
这样的东西
hash=[
100=>[abc,bca],
21=>[xyz],
301=>[pqr,345]
]
端点使用ID和相应的UUID在数据库查询中联接两个表,因此我应该能够在最后提取ID和相应的UUID。
如何传递这两个值?
要在Rails / Rack中的参数中传递数组,您需要在名称中添加方括号并重复参数:
/api/v1/get-info?ids[]=1&ids[]=2&ids[]=3
您可以使用ActiveSupport中的Hash#to_query
生成查询字符串:
Hash#to_query
如@ 3limin4t0r所指出的,您仅应将此值用于简单值的一维数组,例如字符串和数字。
要传递哈希,请使用方括号,但方括号中应包含键:
irb(main):001:0> { ids: [1,2,3] }.to_query
=> "ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3"
同样可以使用/api/v1/get-info?foo[bar]=1&foo[baz]=2
生成查询字符串:
#to_query
键实际上也可以是数字,应该用于传递复杂的结构,例如多维数组或哈希数组。