2011-03-28 85 views
2

我有一個名爲Post(博客文章)的模型和一個名爲Category的模型。每個帖子belongs_to一個類別。每個類別都有一個名爲retainer的屬性,指定的時間量後「過期」之前,因此,例如movies_category.retainer = 30.days軌道模型範圍內的關聯數據

我試圖做的是創建範圍爲Post,用於查找所有這些都是職位「過期」。因此,舉例來說,假設我是硬編碼的30.days的價值,它是適用於所有類別的(因此,所有的職位),適用範圍是:

scope :expired, lambda { where("posts.created_at < ?", 30.days.ago) } 

然而,而不是硬編碼值30.days.ago,我想獲得從這篇文章的類別retainer值和底座上的條件,所以是這樣的:

scope :expired, lambda { where("posts.created_at < ?", 
    Time.now - post.category.retainer) } 

所以投入的話:我想所有這些過期的帖子,和到期狀況確定按照每個帖子的類別的保留值(即電影類別中的帖子在10天內過期,帖子在遊戲類別5天內到期等)

這甚至有可能嗎?我需要某種形式的連接或某種形式嗎?

回答

3
scope :expired, lambda { |retainer| where("posts.created_at < ?", 
    Time.now - retainer) } 

然後,只需使用它像:

Post.expired(post.category.retainer) 

或類別的模型,如:

def Posts 
    Post.expired(retainer) 
end 
+0

謝謝,但我不知道的東西看起來不正確。 Post.expired應該給我過期的帖子,不管他們在什麼類別。如果我做Post.expired(post.category.retainer),是不是隻計算一個帖子的類別? – 2011-03-28 08:43:20

+0

我認爲這不符合你目前的結構。如果您更新郵件上的expired_at,只要它與類別更改相關聯(或者,如果您更新類別並將其推送到任何帖子),它會非常簡單,這將是我的建議。 – ctide 2011-03-28 08:50:45

+0

好的,所以你認爲在帖子中保留expires_at屬性可能更容易,而不是保留類別上的保留屬性。感謝這個想法,我會考慮一下。 – 2011-03-28 08:55:22