9

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

这是我的例子:

我有一个具有“ startDate ”和“ endDate ”属性的模型。两者都有类型'日期'

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

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

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

在控制器中:

@products = Product.activeDate

不幸的是,它不起作用。是否有一种轨道方式(更漂亮)来获取所有条目?

非常感谢。

4

1 回答 1

21

你可以这样做:

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

由于您使用的是更大或等于AND 小于或等于,您可以使用等效的 SQL 函数“BETWEEN”。

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

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

你可以通过这样做来提高你的范围:

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

并像这样使用它:

Product.activeAtDate() #=> use the Date.today
Product.activeAtDate(1.week.ago.to_date) #=> use Today - minus 7 days
于 2013-09-06T15:56:51.130 回答