Ruby on rails 在rails的同一模型上使用不同的SQL填充活动记录集合

Ruby on rails 在rails的同一模型上使用不同的SQL填充活动记录集合,ruby-on-rails,Ruby On Rails,我试图从同一模型上的多个SQL中填充一个活动记录集合。SQLs之间唯一不同的是where子句。我的模型有一个type_id models = Model.where("type_id = ?", 1) logger.debug 'models.count ' + models.count.to_s m = Model.where("type_id = ?", 2) models << m logger.debug 'models.count ' + models.count.to

我试图从同一模型上的多个SQL中填充一个活动记录集合。SQLs之间唯一不同的是where子句。我的模型有一个type_id

models = Model.where("type_id = ?", 1)
logger.debug 'models.count ' + models.count.to_s  
m = Model.where("type_id = ?", 2)
models << m
logger.debug 'models.count ' + models.count.to_s  
第二个SQL不适合我的情况,我想

SELECT COUNT(*) FROM "models"  WHERE (type_id = 2)

我发现解决这个问题的唯一方法就是做
Model.all
,迭代每个,然后添加我想要的。对于大型模型来说,这将非常耗时。有更好的方法吗?

从听起来,您正在寻找任何
类型id为1或2的
模型。在SQL中,可以将其表示为一个子类:

SELECT * FROM models WHERE type_id IN (1, 2);
在Rails中,您可以将可接受值的数组传递给
where
调用,以生成SQL In语句:

Model.where(:type_id => [1, 2])

正如@ArtOfCode所述,您想要的是在一次通过时执行查询。也就是说,您试图在那里做的事情不会起作用,因为当您使用
添加时,不确定您的查询为什么不起作用,这很奇怪。但是想让您了解一下如何组合两个结果数组,
模型和
m
。你应该使用
+=
而不是
谢谢@Gustavo Rubio。你的回答中有很多好的信息。我会详细了解链条状况。
Model.where(:type_id => [1, 2])
models.count
models.length
models << Model.new