如何通过rails中的Get方法传递参数数组?目前我的网址如下:
http://localhost:3000/jobs/1017/editing_job_suites/1017/editing_member_jobs/new?ids[]=1025&ids[]=1027
如何使用Get方法传递数组,但避免使用?ids[]=1025&ids[]=1027
部分。
使用javascript window.open方法发送请求。是否有任何解决方法来发送不是ajax Post请求。
答案 0 :(得分:97)
如果您没有更改任何状态,并且只想访问只读值,则应该坚持使用GET请求。
要在GET请求中向rails发送一组id,只需在末尾用方括号命名变量。
//angular snippet
$http.(method:'GET',
...
params: {'channel_id':2, 'product_ids[]': productIds}
//where productIds is an array of integers
...
)
不要将您的ID连接为以逗号分隔的列表,只需将它们单独冗余地传递即可。所以在网址中它看起来像这样:
?channel_id=2&product_ids[]=6900&product_ids[]=6901
url编码它实际上更像是这样:
?channel_id=2&product_ids%5B%5D=6900&product_ids%5B%5D=6901
Rails会为你分开这个。
Parameters: {"channel_id"=>"2", "product_ids"=>["6900", "6901"]}
答案 1 :(得分:25)
不,GET只能在网址上加上变量。如果您希望URL更短,则必须POST。这是HTTP的限制功能,而不是Rails。
答案 2 :(得分:9)
我最近想要这样做并找到一个稍微复杂一点的解决方法,因此有一些复杂性限制,但也可能更容易实现。不能说安全等等。
如果将数组值作为带分隔符的字符串传递,例如
http://example.com/controller?job_ids=2342,2354,25245
然后您可以获取结果并将其解析回您想要的内容:
job_ids = params[:job_ids].split(',')
然后做任何事情:
job_ids.each do |job_id|
job = Job.find(job_id.to_i)
end
等
答案 3 :(得分:0)
@Homan答案对使用外部客户端有效(例如curl
或角度)。但是在Rails测试用例中,你不应该使用[]
。这是一个例子:
get get_test_cases_url(**path_params), params: {case_ids: ["NON-9450", "NON-12345", "NON-9361"]}
这是使用新格式,其中get_test_cases
是路由名称,并且您将构造URL路径所需的所有参数传递给方法。查询参数是一个单独的哈希。
如果我使用[]
case_ids[]
,而不是["NON-9450", "NON-12345", "NON-9361"]
我将其解析为[["NON-9450"], ["NON-12345"], ["NON-9361"]]