如何在Rails中创建无字符串的日期比较查询?
正确的Rails日期比较查询实现方式
你尝试的写法错误在于:把Ruby层面的比较表达式直接传给where的哈希参数,既会导致语法错误,也无法实现让数据库执行日期比较的需求(因为delivery_date <= Date.today是在Ruby环境中执行的代码,而非生成SQL条件)。
不用字符串编写查询的话,有两种常用的正确实现方式:
方式一:使用范围语法(推荐)
Rails支持用闭合范围..直接表示“小于等于”的条件,写法简洁直观:
project.active.where(delivery_date: ..Date.today)
这会自动生成对应的SQL:WHERE delivery_date <= '当前日期',完全无需手写字符串条件。
方式二:使用Arel构建查询
如果需要更复杂的条件组合,可以用Arel的面向对象方式构建查询逻辑:
delivery_date_column = Project.arel_table[:delivery_date] project.active.where(delivery_date_column.lteq(Date.today))
其中lteq是Arel提供的方法,对应“less than or equal to”(小于等于),同样会生成正确的SQL条件。
内容的提问来源于stack exchange,提问作者snloD
相关产品推荐
相关产品推荐

