2011-10-20 6 views
7

Esto es una continuación de Creating "feeds" from multiple, different Rails models. En esta pregunta, Tadman sugiere este método de creación de una alimentación de usuario de artículos recientes de tres modelos (entradas, Post, informe):Crear un "feed" de múltiples modelos de rieles, de manera eficiente?

@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] 

Sugiere esto como un método que va a trabajar, pero que no necesariamente ser el más eficiente. Sugiere también que un método alternativo sería "crear una tabla de índice que tenga una asociación polimórfica con los diversos registros".

Estoy realmente interesado en aprender más acerca de esta solución alternativa, parece ser más eficiente y más elegante. ¿Alguien puede decirme cómo uno haría esto? Usemos la misma información de fondo de la última pregunta como base.

Respuesta

6

Lo que una vez hice fue tener un feed de modelo independiente (feeds_controller) y actualizarlo en callbacks after_save a todos los modelos interesting. Así, por ejemplo, si tiene un modelo artículo, tener una devolución de llamada after_save:

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

continuación, puede acceder a la alimentación de forma lineal al igual que cualquier otro modelo. El gasto computacional se genera al guardar el feed, no al leer el feed.

Ah, también puede tener Feed has_many :article; has_many :user, has_many :status y demás, y luego :include todos esos recursos en el feed, y renderizarlos en vistas. Espero que esto tenga sentido ;-)

+0

esto parece prometedor. ¡Gracias! – jay

+0

¿Alguna idea sobre cómo poner esto en un controlador y presentarlo en una vista? no estoy seguro de lo que quiere decir con "luego: incluir todos esos recursos en el feed"? – Terryfrancis

Cuestiones relacionadas