AND - 或在activerecord中使用两个备选项,其中查询

时间:2015-12-15 16:13:56

标签: sql ruby-on-rails activerecord arel

我有两个模型,我在两个模型之间进行匹配,以确定它们是否符合某些标准。

Model 1 
model_type == "a" or "b"
rate == Integer

Model 2 

a == true or false
b == true or false
#This defines whether or not model 2 accepts a's or b's respectively

a_min == integer or nil
b_min == integer or nil
#This defines that if the Model1 is of type "A", then Model1.rate needs to be greater than model2.a_min

只要model2不接受a和b型model1s,这是直截了当的。 我可以使用:     model1s.where(model_type:" a")。其中(" rate> =?",@ model2.a_min)

但我希望得到一个包含

的查询响应

如果模型1是a型,

model1.rate > model2.a_min

如果是b型

model1.rate < Model2.b_min

因此...

model1.where(model_type:["a","b"]).where(.........)

我想我需要写一些类似的东西:

model1s.where("(model_type = 'a' AND rate >= :a_min) OR (model_type = 'b' AND rate >= :b_min)", :a_min => @model2.a_min, :b_min => @model2.b_min)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

model1s.where(
  "(model_type = :a AND rate >= :a_min) OR (model_type = :b AND rate >= :b_min)",
  {
    :a => "a", :a_min => @model2.a_min, 
    :b => "b", :b_min => @model2.b_min
  }     
)

似乎要做的伎俩。我错过了哈希周围的花括号。