Sto usando public_activity e uno dei miei parziali ho questa chiamata:Come faccio a caricare eager per più associazioni?
<%= link_to "#{activity.trackable.user.name} " + "commented on " + "#{activity.trackable.node.name}", node_path(activity.trackable.node.family_tree_id,activity.trackable.node) %>
che viene eseguito da questa chiamata:
<% @unread_act.each do |friend| %>
<li><%= render_activity friend %> </li>
<% end %>
Quella variabile di istanza viene assegnato a mio ApplicationController
qui:
Sto usando la gemma Bullet, per trovare le query N + 1 e il feedback che ottengo è questo:
N+1 Query detected
Comment => [:node]
Add to your finder: :include => [:node]
N+1 Query method call stack
inizialmente ho ottenuto quel messaggio per :trackable
e per :user
. Entrambe le cose ora sono caricate con impazienza tramite includes
all'interno di questa dichiarazione di assegnazione.
Tuttavia, non ho idea di come andare su 3 livelli in profondità su un caricamento ansioso - piuttosto che solo due.
Dato che il nodo si chiama come activity.trackable.node.name
, immagino un po 'appropriata assegnazione eager loading sarebbe simile:
@unread_act = Notification.where(owner_id: current_user).includes(:trackable => [:user, :node]).unread_by(current_user)
Ma l'errore che ottengo è questo:
ActiveRecord::AssociationNotFoundError at/
Association named 'node' was not found on Node; perhaps you misspelled it?
ho neanche preso che quando faccio semplicemente:
@unread_act = Notification.where(owner_id: current_user).includes(:trackable => :node).unread_by(current_user)
Così ho il sospetto che qualcosa els e sta andando male qui.
Qualche idea?
Modifica 1
vedere Nodo modelli & di notifica e le associazioni di sotto.
Node.rb
class Node < ActiveRecord::Base
include PublicActivity::Model
tracked except: :update, owner: ->(controller, model) { controller && controller.current_user }
belongs_to :family_tree
belongs_to :user
belongs_to :media, polymorphic: true, dependent: :destroy
has_many :comments, dependent: :destroy
has_many :node_comments, dependent: :destroy
Notification.rb
class Notification < PublicActivity::Activity
acts_as_readable :on => :created_at
end
Mostra i modelli. Quali sono le associazioni 'trackable' di Notification'? Quali sono le associazioni di 'Node'? –
@MarekLipka Domanda aggiornata. – marcamillion