То, что вы говорите, не соответствует действительности - такой запрос, как
SELECT * FROM foos WHERE content_id = 345 AND (confirm = 1 OR auto_confirm = 1)
выберет строки, в которых оба столбца «confirm» установлены в 1 (и ActiveRecord создает столбцы tinyint для булевых элементов и проверяет их на 1 и 0).
Если вы имеете в виду «найти все строки, соответствующие на content_id и имеющие подтвердить или auto_confirmed верно, но не то и другое» тогда вы дошли до запроса, как этот
SELECT * FROM foos WHERE content_id = 345 AND ((confirmed = 1 AND auto_confirm = 0) OR (confirmed = 0 AND auto_confirm = 1))
который вы перефразировать в AR условиях как этот
Reservation.find(:all,
:conditions => [
'container_id = ? AND ((confirmed = 1 AND auto_confirm != 1) OR (confirmed = 0 AND auto_confirm != 1))',
self]
)
Однако, судя по именам ваших полей вы на самом деле реализации государственной машины с отдельными колоннами, которые будут приносить вам боль, так что я бы исследовать что-то, что даст вам прогрессией состояний вместо проверки отдельных битов включения и выключения.
это не будет работать, если оба являются истинными. – Salil
так, как заставить его работать, когда оба являются истинными? – s84
Это работает для меня, когда оба истины. – s84