2016-08-19 10 views
1

複数のIDを使用してActiveRecord関係にアクセスしようとしています。Rails - 複数のID(配列)で照会する方法

IDはParameters: {"ids"=>"[55, 56]"}としています。コントローラでは、私はそれをUser.where(:id=>params[:ids])として使用していますが、このクエリはゼロの結果を返します。

ビューパスはparams[:ids].class.nameStringで今user_posts_path(:ids=>[5, 6])

のようなものです。それを配列としてだけ作る方法は?

答えて

2

User.where(:id=> JSON.parse(params[:ids])) 

を試してみてくださいしかし、私は、可能な場合、配列ではなく、文字列の配列として、これらのIDを渡すために試してみました。

+0

ありがとうございました。それは正常に動作しています。私は配列として渡すだけですが、それはparamsの中の文字列として取っています。 –

+0

あなたは大歓迎です:) – Ursus

2

Railsには、クエリ文字列に配列を渡すための表記法が組み込まれています。

Started GET "/users?ids[]=1&ids[]=2&ids[]=3" for ::1 at 2016-08-19 12:08:42 +0200 
Processing by UsersController#index as HTML 
    Parameters: {"ids"=>["1", "2", "3"]} 

あなたは配列にすべてsome_keyのパラメータをマージしますsome_key[]=1&some_key[]=2表記レールを使用し

パスヘルパーに配列を渡すと、正しいリクエストURLが生成されます。 JSON.parseを使用して

irb(main):012:0> app.users_path(ids: [1,2,3]) 
=> "/users?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3" 
# for clarity 
irb(main):013:0> CGI.unescape app.users_path(ids: [1,2,3]) 
=> "/users?ids[]=1&ids[]=2&ids[]=3" 

はちょうどハック修正して、アプリケーションのバグをマスキングされます。

あなたのケースで最もよく起こりそうなのは、users_path(ids: some_variable)への入力が文字列であり、期待どおりの配列ではないということです。

irb(main):014:0> CGI.unescape app.users_path(ids: "[1,2,3]") 
=> "/users?ids=[1,2,3]" # this will not be treated as an array! 
関連する問題