Подтвердить что ты не робот

Как охватить на прошлой неделе объект Date

Возможный дубликат:
Атрибут Scoping date на этой неделе?

Я пытаюсь охватить все мои продукты на этой неделе, поэтому он должен показать все продукты, ведущие в любой день недели.

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 или настраиваете свой собственный:

приложение/Config/окружающая среда /development.rb

config.time_zone = "Eastern Time (US & Canada)"

Удачи.

4b9b3361

Ответ 1

Это должно сделать трюк:

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 }) }