Ruby on rails 从模型调用时预加载关联';s法

Ruby on rails 从模型调用时预加载关联';s法,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,假设我有一个简单的应用程序运行: # model class Project has_many :numbers def my_numbers numbers end end # controller class ProjectController def index @projects = Project.includes(:numbers) end end 在我看来,没问题。我正在直接给协会打电话,所以所有号码都已加载 @projects.e

假设我有一个简单的应用程序运行:

# model
class Project
    has_many :numbers

  def my_numbers
    numbers
  end
end

# controller
class ProjectController
  def index
    @projects = Project.includes(:numbers)
  end  
end
在我看来,没问题。我正在直接给协会打电话,所以所有号码都已加载

@projects.each do |project|
  project.numbers
  # no probleme here. Hit the cache of included numbers.
end
这是日志

Project Load (0.8ms)  SELECT "projects".* FROM "projects" 
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2)
Project Load (0.8ms)  SELECT "projects".* FROM "projects" 
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2)
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 1
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 2
但在第二个示例中,从Project中的方法调用中调用数字,每次调用my_numbers都会触发一个新的db调用,如下所示:

@projects.each do |project|
  project.my_numbers
end
这是日志

Project Load (0.8ms)  SELECT "projects".* FROM "projects" 
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2)
Project Load (0.8ms)  SELECT "projects".* FROM "projects" 
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" IN (1,2)
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 1
ProjectNumber Load (0.5ms)  SELECT "project_numbers".* FROM "project_numbers" WHERE "project_numbers"."project_id" = 2
有没有办法避免这种情况?为什么我的模型不重用第一个db请求中包含的数字


提前谢谢

我已经在Rails 3.0.9中尝试了这段代码,但它没有实现您描述的行为。您确定数字没有触发回调吗?

我在Rails 3.0.9中尝试了这段代码,但它没有实现您描述的行为。您确定号码没有触发回调吗