通过get in rails传递参数数组

时间:2012-07-03 14:19:50

标签: ruby-on-rails http

如何通过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请求。

4 个答案:

答案 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"]]