如何在Rails中通过Get方法传递参数数组?目前我的URL看起来像这样:
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请求。
如何在Rails中通过Get方法传递参数数组?目前我的URL看起来像这样:
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请求。
如果您不更改任何状态,并且只想访问只读值,则应坚持使用GET请求。
要在GET请求中向Rails发送ID数组,只需在变量名称后面加上方括号即可。
//angular snippet
$http.(method:'GET',
...
params: {'channel_id':2, 'product_ids[]': productIds}
//where productIds is an array of integers
...
)
不要将您的ID连接为逗号分隔的列表,而是逐个冗余地传递它们。因此,在URL中,它应该类似于这样:?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"]}
product_ids[][]=6900&product_ids[][]=6901
。为了生成正确的 URL,请这样做:params: {'channel_id':2, 'product_ids': productIds}
。然后它将生成 URL:product_ids[]=6900&product_ids[]=6901
。 - Maris不行,GET只能将变量放在URL上。如果你想让URL变短,你必须使用POST方法。这是HTTP的一项特性,而不是Rails的限制。
GET
请求是否可以带有请求体。这是Web服务器遵循的约定。如果有人要扩展Web服务器以读取 GET
的HTTP主体,则您也可以通过 GET
请求传递请求正文(前提是找到/修改客户端以通过 GET
请求传递请求正文)。 - kapad最近我想要做这件事,找到了一个解决方法,它不太复杂,但也有一些限制,可能更容易实现。无法保证安全性,等等。
如果您将数组值作为带有分隔符的字符串传递,例如
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
等等
@Homan的回答适用于使用外部客户端(例如 curl
或 angular)。但是在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"]]
。