Я использую public_activity и один из моих частичного меня есть этот призыв:Как я могу загружать несколько ассоциаций?
<%= link_to "#{activity.trackable.user.name} " + "commented on " + "#{activity.trackable.node.name}", node_path(activity.trackable.node.family_tree_id,activity.trackable.node) %>
Это выполняется этим вызов:
<% @unread_act.each do |friend| %>
<li><%= render_activity friend %> </li>
<% end %>
Эти переменная экземпляра назначенный в моем ApplicationController
здесь:
before_filter :handle_nofications
def handle_nofications
if current_user.present?
@unread_act = Notification.where(owner_id: current_user).includes(:trackable => :user).unread_by(current_user)
end
end
Я использую драгоценный камень Bullet, чтобы найти N + 1 запросов и обратную связь, которую я получаю, это:
N+1 Query detected
Comment => [:node]
Add to your finder: :include => [:node]
N+1 Query method call stack
Первоначально я получил это сообщение для :trackable
и :user
. Оба из которых я сейчас хочу загружать через includes
в этот оператор присваивания.
Однако я понятия не имею, как пройти 3 уровня в глубину от нетерпенной загрузки - а не только двух.
Учитывая, что узел называется как activity.trackable.node.name
, я представляю себе подходящее нетерпеливое задание загрузки будет выглядеть примерно так:
@unread_act = Notification.where(owner_id: current_user).includes(:trackable => [:user, :node]).unread_by(current_user)
Но ошибка, я получаю это:
ActiveRecord::AssociationNotFoundError at/
Association named 'node' was not found on Node; perhaps you misspelled it?
я даже получаю что когда я просто делаю:
@unread_act = Notification.where(owner_id: current_user).includes(:trackable => :node).unread_by(current_user)
Так что я подозреваю что-то els e здесь происходит неправильно.
Любые идеи?
Edit 1
См Узел модели & уведомлений и ассоциации ниже.
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
Показать ваши модели. Что такое 'отслеживаемая' ассоциация' Уведомление'? Что такое ассоциации «Узла»? –
@MarekLipka обновленный вопрос. – marcamillion