我想查询Model
where
,其中某些列的组合出现在可能性列表中
具体而言,该模型具有d_type
和d_id
可以是'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)
答案 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>