Я хочу сгенерировать следующий SQL запрос с использованием ActiveRecord для Rails:
SELECT * FROM users WHERE (((1 IS NULL) OR (10 > 20)) AND (2 IS NULL OR (10 > 1)));
Итак, я написал следующую область:
where('1 IS NULL')
.or(where('10 > 20'))
.where('2 IS NULL')
.or(where('10 > 1'))
Однако я получаю немного другое query:
SELECT * FROM users WHERE (((1 IS NULL) OR (10 > 20)) AND 2 IS NULL OR (10 > 1));
Обратите внимание, что у первого нет скобок, окружающих все после AND
, в то время как у первого нет. Это влияет на результаты, которые я получаю (первый запрос оценивается как false, а второй - как true).
Как мне написать второй запрос с помощью ActiveRecord?
Этот вопрос кажется очень похожим: Как правильно добавлять скобки к SQL запросам с предложениями 'или' и 'и' с помощью Arel? Arel теперь является частью Rails, поэтому любой ответ должен быть актуальным.
Разница заключается в обоих такие же запросы, которые приводят к дискуссии о том, как сделать его более понятным, а во-вторых, это было для более старой версии Rails, поэтому ответы, похоже, не работают.
Я также не хочу, чтобы новый драгоценный камень для этого, я думаю, ActiveRecord должен справиться с этим.
Edit:
В итоге я написал это так:
where("(1 IS NULL OR 10 > 20) AND (2 IS NULL OR 10 > 1)")
но теперь я Я просто обхожу ActiveRecord, я надеялся сделать это с помощью ActiveRecord