Ruby on rails ActiveRecord:在.where查询中保留重复的对象

Ruby on rails ActiveRecord:在.where查询中保留重复的对象,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个ID数组: ids = [1, 2, 3, 1] 如果我跑步: Product.where(id: ids) 我只会得到一个iD为1的产品。 但是,我希望获得数组中出现的对象的数量 如何执行此操作?您可以这样尝试,因为where子句返回记录数组: ids = [1, 2, 3, 1] products = [] ids.each do |id| products << Product.find(id) end ids=[1,2,3,1] 产品=[] id.每个d

我有一个ID数组:

ids = [1, 2, 3, 1]
如果我跑步:

Product.where(id: ids)
我只会得到一个iD为
1
产品。
但是,我希望获得数组中出现的对象的数量


如何执行此操作?

您可以这样尝试,因为where子句返回记录数组:

ids = [1, 2, 3, 1]

products = []

ids.each do |id|
  products << Product.find(id)
end
ids=[1,2,3,1]
产品=[]
id.每个do | id|

产品您可以加载唯一记录,然后将结果转换为一个数组,其中包含对每本书的多个引用:

ids = [2109, 2511, 2108, 2109]
tmp_books = Book.find(ids)
new_books = ids.map {|x| tmp_books.detect {|b| b.id == x } }
这将生成一个数组,其中包含要查找的重复项,而只执行一个查询:

Book Load (0.7ms)  SELECT "books".* FROM "books" WHERE "books"."id" IN (2109, 2511, 2108)
=> ["Rick Newman", "Hassan Abbas", "Ms. Martha Byrd", "Rick Newman"]

这样做的一个后果是,对该数组中一条记录的更改可能会影响其他记录。因此,在上面的示例中,有两个引用Rick Newman的书,因此更改第一条记录上的
作者
将更改最后一条记录上的
作者

如果默认情况下
不应用唯一性约束,您的查询应该可以工作,但可以缩短为
[1,2,3]
id
是Rails模型的默认
primary\u键,因此我假设您的表是1)使用不同的主键,或者2)绕过数据库级主键约束并插入重复项(在这种情况下,我很困惑:)。您能分享更多关于您的模型模式、rails/active record版本以及底层数据库技术(postgres、sqlite、mysql)的信息吗