web-dev-qa-db-ja.com

get in railsを介してパラメーターの配列を渡す

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リクエストではなく送信する回避策はありますか。

36

いいえ、GETはURL自体にのみ変数を配置できます。 URLを短くしたい場合は、POSTする必要があります。それは 制限 RailsではなくHTTPの機能。

25
DGM

何かの状態を変更せず、読み取り専用値にアクセスしたい場合は、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"]}
99
Homan

私は最近これをやりたいと思っており、少し複雑ではない回避策を見つけました。そのため、いくつかの複雑さの制限がありますが、実装も簡単かもしれません。セキュリティなどに話せない.

配列値を区切り文字付きの文字列として渡す場合、例えば.

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

9
Jason Preston

@Homanの回答は、外部クライアントを使用する場合に有効です(例:curlまたはangle)。 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"]]に解析されます

0
akostadinov