У меня есть модель с именем 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 дней и т. д.)
Это дажевозможный?Нужна ли мне какая-то форма соединения или что-то еще?