2

Post(ブログ投稿) という名前のモデルと という名前のモデルがありますCategory。それぞれがカテゴリを投稿belongs_toします。各カテゴリにはretainer、投稿が「期限切れ」になるまでの時間を指定するという名前の属性があります。たとえば、movies_category.retainer = 30.days

私がやろうとしているPostのは、「期限切れ」のすべての投稿を見つけるスコープを作成することです。たとえば、 の値をハードコードし、30.daysすべてのカテゴリ (したがってすべての投稿) に適用すると仮定すると、スコープは次のようになります。

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

ただし、 value をハードコーディングする代わりに、投稿のカテゴリから値30.days.agoを取得しretainer、それに基づいて条件を設定したいので、次のようにします。

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

つまり、期限切れのすべての投稿を取得したいのですが、有効期限ステータスは各投稿のカテゴリの保持値によって決まります (つまり、映画カテゴリの投稿は 10 日で期限切れになり、ゲーム カテゴリの投稿は 5 日で期限切れになります)など)

これは可能ですか?なんらかの形で参加する必要がありますか?

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 に答える