45

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

リクエストはjavascriptwindow.openメソッドで送信されています。ajaxPostリクエストを送信しないための回避策はありますか?

4

4 に答える 4

122

何も状態を変更せず、読み取り専用の値にアクセスしたいだけの場合は、GET 要求の使用に固執する必要があります。

ID の配列を GET リクエストで Rails に送信するには、最後に角括弧を付けて変数に名前を付けるだけです。

//angular snippet

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

ID をカンマ区切りのリストとして連結しないでください。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 する必要があります。これは、Rails ではなく、HTTPの制限機能です。

于 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

于 2015-03-03T00:49:51.067 に答える
0

@Homanの回答は、外部クライアント(curlまたはangularなど)を使用する場合に有効です。ただし、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 に答える