在Rails中添加一组ActiveRecord结果是一个好习惯吗?

时间:2011-11-22 16:41:09

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我有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。这不是实际的查询。这个例子简化了。

编辑: 对不起,我没说清楚。目标是得到联合(结果的总和)。

3 个答案:

答案 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