данные ассоциации в объеме модели рельсов - PullRequest
2 голосов
/ 28 марта 2011

У меня есть модель с именем 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 Ответ

3 голосов
/ 28 марта 2011
scope :expired, lambda { |retainer| where("posts.created_at < ?", 
  Time.now - retainer) }

Тогда просто используйте это как:

Post.expired(post.category.retainer)

Или из категории модель, как:

def Posts
  Post.expired(retainer)
end
...