我有2个非常不同的查询:
Model.where(:a => '1', b => '2', c => '3', d => '4')
Model.where(:e => '5', f => '6')
将联盟的结果如下所示是一种好的(或有效的)做法吗?
models = Model.where(:a => '1', b => '2', c => '3', d => '4')
models += Model.where(:e => '5', f => '6')
使用Rails 3.07。这不是实际的查询。这个例子简化了。
编辑: 对不起,我没说清楚。目标是得到联合(结果的总和)。
答案 0 :(得分:2)
如果两个结果集中存在重叠,则可能会出现重复值。请尝试使用管道运算符:
models = Model.where(:a => '1', b => '2', c => '3', d => '4') | Model.where(:e => '5', f => '6')
答案 1 :(得分:2)
Model.where("(a = '1' AND b = '2' AND c = '3' AND d = '4') OR (e = '5' AND f = '6')")
它可能不适用于您的特定情况,但至少只生成一个查询。
无论如何,不要忘记拒绝SQL注入。
答案 2 :(得分:1)
在这种情况下,你不会得到我认为你想要的结果。 Arel将组合这些查询,以便您的模型必须匹配所有这些条件:
:a => '1', b => '2', c => '3', d => '4', :e => '5', f => '6'
如果这就是你想要的,那么这种链接是完全合理的。
相反,如果您希望将两个查询的结果组合在一起,那么您可能需要更多类似的内容:
models = Model.where(:a => '1', b => '2', c => '3', d => '4').all.to_a + Model.where(:e => '5', f => '6').all.to_a