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我不想对value 进行硬编码,而是想retainer从帖子的类别中获取 value 并以此为基础,例如:

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

言归正传:我想获取所有过期的帖子,过期状态由每个帖子类别的留存值决定(即电影类别的帖子10天到期,游戏类别的帖子5天到期, ETC。)

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

4

1 回答 1

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

然后像这样使用它:

Post.expired(post.category.retainer)

或来自类别模型,例如:

def Posts
  Post.expired(retainer)
end
于 2011-03-28T08:26:26.113 回答