2010-11-15 3 views
3

У меня есть 4 Rails 3 области, которые я хотел бы упростить:Объединить Rails 3 сферы в метод класса

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

Я думал о методе класса:

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 

Но я не знаю, что нужно вернуть, чтобы обеспечить совместимость с областями Rails 3.

Это хороший подход? Есть лучший способ сделать это?

** Редактирование ** Я обновил логику метода. Тест If, похоже, не работает, как я ожидаю.

+0

Прохладный идея. Какова цель? что бы вернуть себя? – gmoore

+0

какой-нибудь фильтр. joins (: profile) .where ("available_at>?", Date.today + 90.days) – craig

ответ

3

Мне нужно действие 'по умолчанию'. Я добавил 'joins (: profile)'. Возможно, есть лучший способ, но это сработало.

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 
    joins(:profile) 

end 
Смежные вопросы