Activerecord любой параметр, чтобы установить "не верно" на [nil, false] не просто false? - PullRequest
0 голосов
/ 20 марта 2019

В Activerecord для поля foo, которое может быть ноль, ложь, истина, .where.not(foo: true) не возвращает все записи, для которых foo не соответствует действительности ... он пропускает все записи, где foo равно nil.

В ретроспективе я полагаю, что это не удивительно, поскольку Activerecord требует от вас использовать [nil, false] при запросе напрямую, но это противоречит интуиции в том смысле, что все другие использования .where.not () возвращают «обратное» для .where ()

ВОПРОС: Существует ли вариант .where.not (Z), который работает независимо от того, включает ли Z логические значения или нет?Или есть параметр, который сообщает ActiveRecord, что «не верно» должно быть [nil, false], а не просто «false»?

> Ticket.count
=> 6953

> Ticket.where(outbound: true).count
=> 2

> Ticket.where.not(outbound: true).count
=> 0 # does NOT count the 6951 records where boolean is "not true"

> Ticket.where.not(outbound: true).to_sql
=> "SELECT \"tickets\".* FROM \"tickets\" WHERE \"tickets\".\"outbound\" != TRUE"
...