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 日で期限切れになります)など)
これは可能ですか?なんらかの形で参加する必要がありますか?