rails模型范围中的关联数据

时间:2011-03-28 08:16:29

标签: ruby-on-rails activerecord scope associations relation

我有一个名为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天内等。)

这甚至可能吗?我需要某种形式的加入吗?

1 个答案:

答案 0 :(得分:3)

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

然后就像使用它一样:

Post.expired(post.category.retainer)

或者来自类别模型:

def Posts
  Post.expired(retainer)
end