我正在尝试查找特定日期的开始和结束日期范围的记录。日期是随机的,并且:start_date和:end_date是价格实体的属性。
date = Time.now
record_i_want = Price.where(date => :start_date .. :end_date)
谢谢。
答案 0 :(得分:9)
你可以简单地做
Price.where(:date => start_date..end_date)
这将产生以下SQL
(开始和结束日期 - '2014-03-27','2014-03-28')
SELECT `prices`.* FROM `prices` WHERE (`prices`.`date` BETWEEN '2014-03-27' AND '2014-03-28')
修改强> 意识到这是您正在寻找的查询。谢谢,Coenwulf指出了它
Price.where(['start_date < ? AND end_date > ?', date, date])
答案 1 :(得分:2)
您希望选择日期大于start_date且小于end_date的行。您可以在调用中指定参数化的相应SQL where子句,如下所示:
Price.where([":date >= start_date AND :date <= end_date", {date: Date.today})
这将为您提供匹配的所有价格。如果你知道你只得到一个,你可以先打电话给它。
Price.where([":date >= start_date AND :date <= end_date", {date: Date.today}).first
如果要从结果中排除start_date和/或end_date,请对&gt; =和&lt; =进行适当的调整。例如,如果价格从start_date开始有效但通过end_date无效,则可以将该子句更改为:
":date >= start_date AND :date < end_date"
答案 2 :(得分:-1)
这应该有效:
def get_record_by_date(date)
Price.where([start_date.to_i < date.to_i] && [end_date.to_i > date.to_i])
end