2011-12-14 7 views
12

Powiel możliwe:
Scoping date attribute for this week?Jak zakresu ubiegłym tygodniu przez obiekt Date

Próbuję zakresie wszystkich moich produktów w tym tygodniu, więc powinno pokazać wszystkie produkty czołowych do dowolnego dnia tygodnia.

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 

Ten kod nic nie wyświetla w widoku, więc co muszę poprawić?


ODPOWIEDŹ

Z jakiegoś powodu musiałem dodać advance(:days => -1) w celu również pobrać poniedziałek, jak również. Być może nie musisz tego robić.

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 

AKTUALIZACJA ODPOWIEDŹ

miałem zrobić advance(:days => -1) ponieważ strefy razem, gdy jestem w. Pozbyłem się tego, upewniając się, że jestem w moim Strefa czasowa. Więc teraz to może być normalne, jak powinno być:

def self.last_week 
    where(:purchase_date => 1.week.ago.beginning_of_week..1.week.ago.end_of_week) 
end 

i powinno działać poprawnie tylko jeśli przejdziesz przez domyślnej strefy Szyny czasu lub config własny:

app/config/Środowisko/rozwój .rb

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

Powodzenia.

Odpowiedz

9

To powinno załatwić sprawę:

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

Tak na dzień zostać zaktualizowane prawidłowo za każdym razem – apneadiving

+0

może to pójść wewnątrz zdefiniowanego sposobu? – LearningRoR

+0

może wejść do metody, ale nie będziesz wtedy potrzebował lambda. Nadal uważam, że powinieneś zachować zakres – apneadiving

Powiązane problemy