我有一个GET方法,在加载日历页面时会调用它:
def get_events
@events.select {|event| event.task.present? }.each do |event|
target_contact = event.task.primary_contact
owner = event.task.task_followers.where(owner: true).first.follower
events << { id: event.id, title: event.title, contact: target_contact, owner: owner }
end
render json: events.to_json
end
我有数百万个事件,我看到了大量的N + 1个查询,因为它会加载单个事件和关系。我知道Rails提供了一种包含方法来消除此类查询。但include方法只需要符号参数:
Event.includes(:task)
我不认为使用include方法构建我的json响应是不可能的。
以下是关系:
class Event < ActiveRecord::Base
belongs_to :task
end
class Task < ActiveRecord::Base
has_many :task_followers, dependent: :destroy
end
有什么想法吗?
答案 0 :(得分:0)
您可以加载如下的嵌套关联:
Event.includes(task: [task_followers: :follower])