我在模型中有一个范围:
scope :daily, lambda {|day| where :post_time =>
[day.beginning_of_day() .. day.end_of_day()] }
:post_time
在数据库中声明不可为空,但 AREL 坚持在IN (NULL)
生成的 SQL 中添加一个虚假的:
SELECT `<table>`.* FROM `<table>`
WHERE (`<table>`.`post_time`
BETWEEN '2013-02-05 00:00:00' AND '2013-02-05 23:59:59'
OR `<table>`.`post_time` IN (NULL))
我怎样才能阻止它这样做?显然我可以再添加一个条件not_eq(nil)
,:post_time != nil
或类似的,但我的问题是为什么AREL 会这样做,以及如何在没有额外条件否定它的情况下阻止它。