Я создаю групповой блог, который модерируется сообществом. Когда пользователь заходит на страницу moderate
, он получает случайное сообщение, которое он еще не модерировал, и спрашивает, должно ли это сообщение появиться.
Итак, соответствующие объекты: Post
, User
и Moderation
. A Moderation
имеет post_id
и user_id
. Я хочу найти сообщение из набора Post.all
, где не существует объекта Moderation
, соответствующего этому сообщению и текущему пользователю.
Какой самый эффективный способ сделать это? Я мог бы получить все модерации для этого пользователя, а затем использовать map
, чтобы получить все сообщения, которые модерировал пользователь, а затем запросить базу данных сообщений как (псевдокод) Post.find(:conditions => "id != [list of posts already moderated])
, но я ' Я обеспокоен тем, что может быть медленным? Есть ли более быстрый способ?
Кроме того, было бы неплохо как-то кешировать это? Может быть, получая все сообщения, которые не были модерированы, и сохраняя их где-то, а затем, когда будут сделаны будущие вызовы метода moderate
, сначала проверьте этот кеш и обработайте сообщение (и удалите это сообщение из кеша), и только проверять еще раз сообщения, если кеш пуст?
Спасибо за вашу помощь!