Условия поиска activerecord - поиск нулевого или ложного
При выполнении поиска в активной записи я ищу запись, у которой нет архивного бита, установленного в true.
Некоторые из заархивированных битов имеют нулевое значение (которые не архивируются), другие архивированные установлены в false.
Очевидно,
Project.all(:conditions => {:archived => false})
пропускает проекты с заархивированными битами с нулевыми значениями. Как можно выбрать все неархивированные проекты с активной записью?
Ответы
Ответ 1
Попробуйте это (в Rails 2):
Project.all(:conditions => ['archived IS NULL OR archived = ?', false])
Это ограничение более старых версий Rails, как описано здесь: https://rails.lighthouseapp.com/projects/8994/tickets/1181-ar-find-producing-null-when-it-should-be-is-null
Ответ 2
Rails 4 (возможно, ранее) поддерживает:
Project.where(archived: [false, nil])
..., что довольно кратким.
Ответ 3
Правильный способ агрегирования базы данных для этого:
Project.where("archived IS NULL OR archived = ?", false)
Ответ 4
@metasoarous
Try:
Project.all(:conditions => "archived IS NULL OR archived = 'F'")
Ответ 5
Если вы хотите быть агностиком базы данных, вы можете сделать это в Rails 3:
Project.where("archived IS NULL OR archived = #{ActiveRecord::Base.connection.quoted_false}")