Rails - 如何查询多个ID(数组)
问题描述:
在rails 4中,我试图使用多个ID访问一个ActiveRecord关系。Rails - 如何查询多个ID(数组)
ID是来为Parameters: {"ids"=>"[55, 56]"}
。在控制器中,我使用它作为User.where(:id=>params[:ids])
,但此查询返回零结果。
查看路径就像user_posts_path(:ids=>[5, 6])
眼下params[:ids].class.name
是String
。如何使它只作为一个数组?
答
尝试
User.where(:id=> JSON.parse(params[:ids]))
但我会尝试在一个字符串,通过这些ID作为数组,而不是一个数组如果可能的话。
答
的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[]=1&some_key[]=2
符号Rails会所有some_key
参数合并成一个数组。
传递一个阵列到路径助手将产生正确的请求URL。
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"
使用JSON.parse
只是掩盖错误与哈克解决您的应用程序。
什么是最有可能会错在你的情况是,输入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!
谢谢。它工作正常。我只将它作为一个数组传递,但它在参数内部作为一个字符串。 –
不客气:) – Ursus