Создание "подачи" из нескольких моделей рельсов, эффективно? - PullRequest
8 голосов
/ 21 октября 2011

Это продолжение до Создание «фидов» из нескольких различных моделей Rails . В этом вопросе tadman предлагает этот метод создания пользовательского фида последних элементов из трех моделей (Ticket, Post, Report):

 @items = [ Ticket, Post, Report ].inject([ ]) do |a, with_class|
   a + with_class.find(:all, :limit => 10, :order => 'created_at DESC')
 end.sort_by(&:created_at).reverse[0, 10]

Он предлагает это как метод, который будет работать, но не обязательно будет самым эффективным. Он предлагает и альтернативный метод - «создать индексную таблицу, которая имеет полиморфную связь с различными записями».

Мне действительно интересно узнать больше об этом альтернативном решении, оно кажется более эффективным и элегантным. Может кто-нибудь сказать мне, как это сделать? Давайте использовать в качестве основы ту же справочную информацию из последнего вопроса.

1 Ответ

7 голосов
/ 21 октября 2011

То, что я когда-то делал, - это создание отдельной модели Feed (feeds_controller) и обновление ее в обратных вызовах after_save для всех моделей interesting.Так, например, если у вас есть модель Article, у вас есть обратный вызов after_save:

def after_save
  feed = Feed.new
  feed[:model_name] = 'Article'
  feed[:item_id] = id
  feed.save
end

, то вы можете получить линейный доступ к каналу, как и любая другая модель.Затраты на вычисления возникают при сохранении канала, а не при чтении из канала.

О, вы также можете иметь Feed has_many :article; has_many :user, has_many :status и т. Д., А затем :include все эти ресурсы в канале и выполнитьих во взглядах.Надеюсь, что это имеет смысл; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...