通过get in rails传递参数数组

Raf*_*yan 36 ruby-on-rails http

如何通过rails中的Get方法传递参数数组?目前我的网址是这样的:

http://localhost:3000/jobs/1017/editing_job_suites/1017/editing_member_jobs/new?ids[]=1025&ids[]=1027
Run Code Online (Sandbox Code Playgroud)

如何使用Get方法传递数组但避免使用?ids[]=1025&ids[]=1027.

使用javascript window.open方法发送请求.是否有任何解决方法发送不ajax Post请求.

Hom*_*man 103

如果您没有更改任何状态,并且只想访问只读值,则应该坚持使用GET请求.

要在GET请求中将一组id发送到rails,只需在末尾用方括号命名变量.

//angular snippet

$http.(method:'GET',
  ...
  params: {'channel_id':2, 'product_ids[]': productIds}  
  //where productIds is an array of integers
  ...
)
Run Code Online (Sandbox Code Playgroud)

不要将您的ID连接为逗号分隔列表,只是冗余地单独传递它们.所以在网址中它看起来像这样:

?channel_id=2&product_ids[]=6900&product_ids[]=6901
Run Code Online (Sandbox Code Playgroud)

url编码它实际上会更像这样:

?channel_id=2&product_ids%5B%5D=6900&product_ids%5B%5D=6901
Run Code Online (Sandbox Code Playgroud)

Rails会为你分开这个.

Parameters: {"channel_id"=>"2", "product_ids"=>["6900", "6901"]}
Run Code Online (Sandbox Code Playgroud)

  • +1使用"product_ids [] = 6900&product_ids [] = 6901"方法传递参数列表 (5认同)

DGM*_*DGM 24

不,GET只能将变量放在url本身上.如果您希望URL更短,则必须POST.这是HTTP 的限制功能,而不是Rails.


Jas*_*ton 9

我最近想要这样做并找到一个稍微复杂一点的解决方法,因此有一些复杂性限制,但也可能更容易实现.不能说安全等

如果将数组值作为带分隔符的字符串传递,例如

http://example.com/controller?job_ids=2342,2354,25245
Run Code Online (Sandbox Code Playgroud)

然后,您可以获取结果并将其解析回您想要的内容:

job_ids = params[:job_ids].split(',')
Run Code Online (Sandbox Code Playgroud)

然后做任何事情:

    job_ids.each do |job_id|
      job = Job.find(job_id.to_i)
    end
Run Code Online (Sandbox Code Playgroud)

等等