本周我试图确定我的所有产品的范围,因此它应该显示所有产品,直到一周中的哪一天。
class Product < ActiveRecord::Base
attr_accessible :purchase_date
def self.last_week # All prices of last week.
where(:purchase_date => 1.week.ago)
end
create_table :products do |t|
t.date :purchase_date
end
end
此代码在视图中不呈现任何内容,因此我需要更正哪些内容?
ANSWER
出于某种原因,我必须添加advance(:days => -1)
以便也检索星期一。你可能不必这样做。
def self.last_week
where(:purchase_date => 1.week.ago.beginning_of_week.advance(:days => -1)..1.week.ago.end_of_week).order("purchase_date desc")
end
更新的答案
由于我所处的时区,我不得不做advance(:days => -1)
。我通过确保我在自己的时区来摆脱这个。所以现在它应该是正常的:
def self.last_week
where(:purchase_date => 1.week.ago.beginning_of_week..1.week.ago.end_of_week)
end
只有当您使用默认的Rails时区或自行配置时,它才能正常工作:
应用程序/配置/环境/ development.rb
config.time_zone = "Eastern Time (US & Canada)"
祝你好运。
答案 0 :(得分:11)
这应该可以解决问题:
scope :last_week, lambda { where("purchase_date >= :date", :date => 1.week.ago) }
scope :past_week, lambda { where("purchase_date >= :start_date AND purchase_date <= :end_date", {:start_date => 1.week.ago, :end_date => 1.day.ago }) }