2015-12-15 2 views
-1

У меня есть две модели, где я выполняю совпадение между ними, чтобы определить, соответствуют ли они определенным критериям.И - ИЛИ используя две альтернативы в activerecord, где запрос

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 

Это просто, если модель 2 не принимает модели a и b типа1. я могу просто использовать: model1s.where (model_type: "а"). Где ("? Скорость> =", @ model2.a_min)

Но я хочу, чтобы получить один ответ на запрос, содержащий

Если модель 1 имеет тип а,

model1.rate > model2.a_min 

Если это типа б

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) 

Любые идеи?

ответ

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 
    }  
) 

Казалось, сделать трюк. Мне не хватало фигурных скобок вокруг хэша.

Смежные вопросы