2011-12-14 23 views
12

Olası Çoğalt: o lider tüm ürünleri göstermesi gerekir böylece
Scoping date attribute for this week?nasıl Date nesnesi tarafından kapsamına geçen haftaya

Ben, bu hafta kapsamına benim Ürünlerin hepsi çalışıyorum haftanın hangi gününe kadar.

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 

Bu kod, görünümde hiçbir şey oluşturmaz, dolayısıyla düzeltmem gerekenler nelerdir?


CEVAP

Nedense ben aynı zamanda Pazartesi almak üzere için advance(:days => -1) eklemek zorunda kaldı. Bunu yapmak zorunda olmayabilirsin.

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 

GÜNCELLEME CEVAP ben çünkü içindeyim Zaman bölgenin advance(:days => -1) yapmak zorunda

. Ben kendi saat diliminde olduğum emin olarak bu kurtulmuştur.

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

Ve doğru SADECE varsayılan Raylar Saat dilimi gitmek veya kendi konfigürasyon dosyasında eğer çalışması gerekir:

app/config/çevre/gelişmeyi olması gerektiği gibi Yani şimdi normal olabilir .rb

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

İyi şanslar.

cevap

9

Bu hile yapmak gerekir: tarih için

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

evet bu tanımlanmış yöntemin içeri Could düzgün her zaman – apneadiving

+0

güncellenmesi? – LearningRoR

+0

, yöntemin içine girebilir, ancak o zaman lambdaya ihtiyacınız olmaz. Hala kapsamı – apneadiving

İlgili konular