Rails仅限两个日期之间的值

N. *_*hle 9 scope ruby-on-rails

我喜欢在Rails中有一个范围,用于仅选择两个日期之间的值.

这是我的例子:

我有一个带有' startDate '和' endDate ' 属性的模型.两者都有' 日期 ' 类型

现在我想从今天开始选择每个条目,这是在这两个日期之间.

我做了一个范围看起来像这样.

class Product < ActiveRecord::Base
  scope :activeDate, -> { where("? >= ? AND ? <= ?", Time.now.to_date, :saleStartDate, Time.now.to_date, :salesEndDate)}
Run Code Online (Sandbox Code Playgroud)

在控制器中:

@products = Product.activeDate
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.获得所有条目是否有轨道(更美观)?

非常感谢.

MrY*_*iji 18

你可以这样做:

scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Time.now.to_date)}
Run Code Online (Sandbox Code Playgroud)

由于您使用的是更大或相等的 AND 更小,您可以使用等效的SQL函数"BETWEEN".

您不需要将时间转换为日期,您可以直接调用Date.today:

scope :activeDate, -> { where("? BETWEEN startDate AND endDate", Date.today)}
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式改善范围:

scope :activeAtDate, lambda{ |date = Date.today| where("? BETWEEN startDate AND endDate", date) }
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

Product.activeAtDate() #=> use the Date.today
Product.activeAtDate(1.week.ago.to_date) #=> use Today - minus 7 days
Run Code Online (Sandbox Code Playgroud)