Данные ассоциации в объеме модели рельсов
У меня есть модель по имени 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 ответ
scope :expired, lambda { |retainer| where("posts.created_at < ?",
Time.now - retainer) }
Тогда просто используйте это как:
Post.expired(post.category.retainer)
Или из категории модели, как:
def Posts
Post.expired(retainer)
end