使用二维数组的ActiveRecord查询

时间:2014-08-31 17:09:37

标签: sql ruby-on-rails activerecord

任何人都可以在这个问题上帮助我,就像我有这样的二维数组

array = [[1, 'go'], [15, 'flat']........] 

我在数据库中有一个名为FeedPost的表,现在在2D数组中,每个数组中的第一个元素表示列user_id,第二个表示列feed_type。现在我想从该表中获得满足该数组元素的所有记录与这些精确列完全匹配。换句话说我想做那样的事,

FeedPost.find_all_by_user_id_and_feed_type(array)

但不幸的是它显示以下参数错误。

ArgumentError: wrong number of arguments (1 for 2)

所以任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

安装any_of gem,然后:

queries = array.map {|sub_array| FeedPost.where({ user_id: sub_array[0], feed_type: sub_array[1] }) }
FeedPost.where.any_of(*queries)

答案 1 :(得分:0)

我认为最好的解决方案是:

FeedPost.where(user_id: array.map(&:first)).where(feed_type: array.map(&:last))

这会将您的数组拆分为两个数组,一个包含user_ids,另一个包含feed_types,并使用IN SQL语句相应地查询Feed帖子。

编辑:这将带来任何具有user_id和feed_type组合的记录。如果您只想要从阵列中的单个项目中同时满足user_id和feed_type的记录,那么这将无法正常工作。