以下方法和关联完成相同的事情。他们都会成为一名活跃的学生。当前学校可用的方法。但是,该关联使用了125个查询,并且该方法使用1.该方法使用eager-loading但是,关联似乎更像是rails方式。
与从Account构建查询相比,为什么school.accounts效率低下?是否有可能保持关联并对其使用急切加载?我的方法方法是否合适,还是有更好的方法来解决这个问题?
# application_controller
def active_students # 1 query
# used by simply calling active_students
Account.includes(:role, {user: :school}).where(status: 0).where("roles.name = ?", 'student').where("users.school_id = ?", current_school.id).references(:role, :user, :school)
end
# school.rb
# used by calling current_school.active_students
# 125 queries
has_many :active_students, -> { joins(:role).where( "roles.name = ? AND accounts.status = ?", "student", 0 ) }, source: :accounts, through: :users
答案 0 :(得分:0)