Rails 4急切加载(关联vs方法)效率

时间:2015-01-26 17:38:04

标签: ruby-on-rails ruby-on-rails-4 eager-loading

以下方法和关联完成相同的事情。他们都会成为一名活跃的学生。当前学校可用的方法。但是,该关联使用了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

VS

  # 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

1 个答案:

答案 0 :(得分:0)