J'ai 4 Rails 3 scopes que je voudrais simplifier:Combiner Rails 3 Champ d'application en méthode de classe
scope :age_0, lambda {
where("available_at IS NULL OR available_at < ?", Date.today + 30.days)
}
scope :age_30, lambda {
where("available_at >= ? AND available_at < ?", Date.today + 30.days, Date.today + 60.days)
}
scope :age_60, lambda {
where("available_at >= ? AND available_at < ?", Date.today + 60.days, Date.today + 90.days)
}
scope :age_90, lambda {
where("available_at >= ?", Date.today + 90.days)
}
Je pensais à une méthode de classe:
def self.aging(days)
joins(:profile).where("available_at IS NULL OR available_at < ?", Date.today + 30.days) if days==0
joins(:profile).where("available_at >= ? AND available_at < ?", Date.today + 30.days, Date.today + 60.days) if days==30
joins(:profile).where("available_at >= ? AND available_at < ?", Date.today + 60.days, Date.today + 90.days) if days==60
joins(:profile).where("available_at >= ?", Date.today + 90.days) if days==90
end
Mais je ne sais pas ce qu'il faut retourner pour s'assurer qu'il sera compatible avec les portées Rails 3.
Est-ce une bonne approche? Y a-t-il une meilleure manière de faire cela?
** modifier ** J'ai mis à jour la logique de la méthode. Le test if ne semble pas fonctionner comme prévu.
Idée cool. Quel est le but? Que retournerait-il? – gmoore
une sorte de filtre. joint (: profile) .where ("available_at>?", Date.today + 90.days) – craig