我有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範圍兼容。
這是一個很好的方法嗎?有一個更好的方法嗎?
**編輯** 我更新了方法的邏輯。如果測試似乎沒有像我期望的那樣工作。
很酷的想法。目標是什麼?什麼self.aging返回? – gmoore 2010-11-15 15:10:04
某種過濾器。加入(:profile).where(「available_at>?」,Date.today + 90.days) – craig 2010-11-15 17:06:11