2011-12-14 13 views
12

Duplicar posibles:
Scoping date attribute for this week?Cómo alcance última semana por objeto Date

estoy tratando de alcance todos mis productos para esta semana, por lo que debe mostrar todos los productos líderes hasta cualquier día de la semana.

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 

Este código no representa nada en la vista, ¿qué debo corregir?


RESPUESTA

Por alguna razón he tenido que añadir advance(:days => -1) a fin de recuperar también el lunes como así. Puede que no tengas que hacer esto sin embargo.

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 

RESPUESTA ACTUALIZADO

que tenía que hacer la advance(:days => -1) debido a la zona horaria que estoy. Me deshice de esto asegurándose de que estoy en mi propia zona horaria. Por lo que ahora puede ser normal como debe ser:

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

y debería funcionar correctamente sólo si vas por la zona por omisión rieles tiempo o config su propio:

app/config/Medio ambiente/desarrollo .rb

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

Buena suerte.

Respuesta

9

Esto debería hacer el truco:

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

sí para la fecha que se actualizan adecuadamente cada vez – apneadiving

+0

Podría esto ir dentro del método definido? – LearningRoR

+0

puede ir dentro del método, pero no necesitará la lambda entonces. Sigo creyendo que debes mantener el alcance – apneadiving

Cuestiones relacionadas