我使用的API希望我以以下格式进行请求:
?filter=value1&filter=value2
但是,我使用的是Active Resource,当我指定:params哈希时,我无法使同一参数在URL中出现两次,我认为这是正确的。所以我不能这样做:
:params => {:consumer_id => self.id, :filter => "value1", :filter => "value2" }
,因为哈希的第二个过滤器索引将被忽略。
我知道我可以像这样传递一个数组(我相信这是正确的方法):
:params => {:consumer_id => self.id, :filter => ["value1","value2"] }
这将产生如下网址:
?filter[]=value1&filter[]=value2
对我来说似乎还可以,但API不接受。所以我的问题是:
传递带有多个值的参数的正确方法是什么?它是特定于语言的吗?谁来决定?
要创建有效的查询字符串,可以使用
params = {a: 1, b: [1,2]}.to_query
http://apidock.com/rails/Hash/to_queryhttp://apidock.com/rails/Hash/to_param
http://guides.rubyonrails.org/action_controller_overview.html#hash-and-array-parameters
尝试:filter [] =>值,:filter [] => value2
您可以通过创建允许重复键的哈希值来生成包含重复参数的查询字符串。因为这依赖于使用对象ID作为哈希键,所以至少对于重复的键,您需要使用字符串而不是符号。
(参考:Ruby Hash with duplicate keys?)
params = { consumer_id: 1 } # replace with self.id
params.compare_by_identity
params["filter"] = "value1"
params["filter"] = "value2"
params.to_query #=> "consumer_id=1&filter=value1&filter=value2"