45

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

4 回答 4

122

如果你不改变任何东西的状态,你应该坚持使用 GET 请求,并且你想要访问只读值。

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

//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"]}
于 2014-04-14T17:59:39.873 回答
24

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

于 2012-07-03T14:27:34.087 回答
13

我最近想这样做,并找到了一种不太复杂的解决方法,因此有一些复杂性限制,但也可能更容易实现。不能和保安说话等等。

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

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

ETC

于 2015-03-03T00:49:51.067 回答
0

@Homan 答案对于使用外部客户端(例如curl或角度)有效。不过,在 Rails 测试用例中,您不应该使用[]. 这是一个例子:

get get_test_cases_url(**path_params), params: {case_ids: ["NON-9450", "NON-12345", "NON-9361"]}

这是使用新格式,其中get_test_cases是路由名称,并且您将构造 URL 路径所需的所有参数传递给该方法。查询参数是一个单独的哈希。

仅供参考,如果我使用[]like case_ids[],那么["NON-9450", "NON-12345", "NON-9361"]我不会将其解析为[["NON-9450"], ["NON-12345"], ["NON-9361"]]

于 2016-12-29T17:41:34.390 回答