1

在创建范围以返回所有生日在两天之间的用户以及其他一些条件后,我遇到了一个问题。此信息应该呈现给用户仪表板。

如果我刷新页面,则找到 0 条记录。如果我在 Rails 开发环境控制台中运行范围,它也会返回 0 条记录。但是,如果我在活动记录器打开时从控制台复制查询,并将其直接放入我的 SQL 客户端,它会返回正确的记录。此范围也与其他一些范围链接,但如果我要从查询链中删除此范围,则查询有效,它只是不会像我希望此范围那样过滤出生日期范围。

SQL 客户端在同一个数据库上。

范围:

where(
  "(date_of_birth <= ?) OR DATE_ADD(date_of_birth, INTERVAL ? YEAR) BETWEEN ? AND ?", 
  min_age.years.ago.to_date, 
  min_age, 
  beginning_of_month, 
  end_of_month
)

查询:

SELECT `drivers`.* FROM `drivers` WHERE ( (date_of_birth <=
'1990-02-05') OR DATE_ADD(date_of_birth, INTERVAL 23 YEAR) BETWEEN
'2013-04-01' AND '2013-04-30') AND (drivers.id NOT IN (SELECT
driver_id from follow_ups where team_id = 2)) AND
(average_miles_per_day >= 0.35) AND (travel_time < 2000) AND
(travel_time + (average_miles_per_day * 84) >= 2000)

任何时候 Rails 试图执行这个查询它都不起作用。在 SQL 客户端中执行此查询时,它就像一个魅力。

4

1 回答 1

0

也许......字符串到日期的转换存在问题。尝试使用 STR_TO_DATE() 函数在您的模型中进行转换。请在每个日期都这样做......让我知道它有帮助。

于 2013-02-05T20:27:06.880 回答