Lea*_*RoR 13 ruby ruby-on-rails ruby-on-rails-3
可能重复:
本周的作用域日期属性?
我本周试图确定我的所有产品的范围,所以它应该显示所有产品,直到一周中的哪一天.
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
Run Code Online (Sandbox Code Playgroud)
此代码在视图中不呈现任何内容,因此我需要更正哪些内容?
回答
出于某种原因,我必须添加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
Run Code Online (Sandbox Code Playgroud)
更新的答案
我必须这样做,advance(:days => -1)因为我所在的时区.我通过确保我在自己的时区来摆脱这个.所以现在它应该是正常的,因为它应该是:
def self.last_week
where(:purchase_date => 1.week.ago.beginning_of_week..1.week.ago.end_of_week)
end
Run Code Online (Sandbox Code Playgroud)
只有当您使用默认的Rails时区或您自己配置时,它才能正常工作:
应用程序/配置/环境/ development.rb
config.time_zone = "Eastern Time (US & Canada)"
Run Code Online (Sandbox Code Playgroud)
祝好运.
apn*_*ing 12
这应该做的伎俩:
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 }) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9243 次 |
| 最近记录: |