3

我在模型中有一个范围:

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 会这样做,以及如何在没有额外条件否定它的情况下阻止它。

4

1 回答 1

3

看起来你通过传入一个范围数组来混淆 arel(尽管我不确定为什么这会增加额外的子句)。

scope :daily, lambda {|day| where :post_time => 
  (day.beginning_of_day() .. day.end_of_day()) }

应该可以。

于 2013-02-12T13:19:36.800 回答