使用可能值列表查询AR

时间:2014-08-26 12:07:08

标签: sql activerecord ruby-on-rails-4 arel

我想查询Model where,其中某些列的组合出现在可能性列表中

具体而言,该模型具有d_typed_id

的多态关联 带有d_type的

可以是'Gal''Bar'

所以之前,我会做一些逻辑来获取我想要查询Model表的每个类的可能ID

有没有办法像

那样做
Model.where("d_type = 'Gal' AND d_id = :g OR d_type = 'Bar' AND d_id = :b", g: g_ids, b: b_ids)

1 个答案:

答案 0 :(得分:0)

我不知道是否有更好的方法可以做到这一点,但这里有一些可以解决的问题:

combined_conditions = [[1,'a'],[2,'b'],[3,'c']].inject(nil){|mem,(v1,v2)|
  condition = Arel::Nodes::Grouping.new(
    Foo.arel_table[:baz].eq(v1).and(Foo.arel_table[:bar].eq(v2))
  )
  mem = mem ? Arel::Nodes::InfixOperation.new('OR', mem, condition) : condition
};

puts Foo.where(combined_conditions).to_sql

给出:

SELECT&#34; foos&#34;。* FROM&#34; foos&#34;在哪里((&#34; foos&#34;。&#34; baz&#34; = 1 AND&#34; foos&#34;。&#34; bar&#34; =&#39; a&#39;)或(&#34; foos&#34;。&#34; baz&#34; = 2 AND&#34; foos&#34;。&#34; bar&#34; =&#39; b&#39;)或(&#34; foos&#34;。&#34; baz&#34; = 3 AND&#34; foos&#34;。&#34; bar&#34; =&#39; c&#39;))< / p>