2012-03-01 1 views
0

Я работаю над проектом, который использовал это plugin. Я действительно не могу использовать какой-либо другой плагин, чтобы делать то, что мне нужно.Вложение приоритета в предложение where с помощью плагина ez_where для рубинов на рельсах.

Я использую это, чтобы построить предложение WHERE в моем запросе, которое иначе построено. Вот как я это делаю:

cond = EZ::Where::Condition.new 
if first_condition 
    cond.append "A > B" 
end 
if second_condition 
    cond.append "C < D" 
end 
if third_condition 
    cond.or "E > F" 
    cond.or "G > H" 
end 

Проблема в том, что любые сочетания первого, второго или третьего условий могут быть правдой. Но в любом случае, мой запрос должен быть таким:

Where A > B AND C < D AND (E > F OR G > H) 

И если только первый и третий условие истинно, то:

Where A > B AND (E > F OR G > H) 

Как это сделать в ez_where плагин для рубина на рельсы? Или, если не так, как мне это вообще делать?

ответ

0
cond = EZ::Where::Condition.new 
if first_condition 
    cond.append "A > B" 
end 
if second_condition 
    cond.append "C < D" 
end 
if third_condition 
    cond.or "E > F" 
    cond.or "G > H" 
end 

Я просто понял, действительно легкий способ сделать выше будет

cond1 = EZ::Where::Condition.new 
if first_condition 
    cond1.append "A > B" 
end 
if second_condition 
    cond1.append "C < D" 
end 
cond2 = EZ::Where::Condition.new 
if third_condition 
    cond2.or "E > F" 
    cond2.or "G > H" 
end 
cond = EZ::Where::Condition.new 
cond.append cond