【发布时间】:2018-05-03 17:33:59
【问题描述】:
Ruby 2.1、Rails 3.2
我的项目模型中有这种关系
scope :active, -> { where( deleted_at: nil ) }
has_many :foremen, class_name: "ProjectsUser", conditions: ['current_foreman = 1']
在控制器中:
@projects = Project.includes(:foremen).active
生成此 SQL
ProjectsUser Load (3.3ms) SELECT `projects_users`.* FROM `projects_users` WHERE `projects_users`.`project_id` IN (122, 130, ...etc.) AND ( current_foreman = 1)
但是当我在视图中调用关系时...
<% @projects.each do |project| %>
<%= project.foremen.current_foreman %>
<% end %>
它每次都会运行另一个 SQL 查询。
ProjectsUser Load (2.5ms) SELECT `projects_users`.* FROM `projects_users` WHERE `projects_users`.`project_id` = 122 AND (current_foreman = 1 )
ProjectsUser Load (2.5ms) SELECT `projects_users`.* FROM `projects_users` WHERE `projects_users`.`project_id` = 130 AND (current_foreman = 1 )
ProjectsUser Load (2.5ms) SELECT `projects_users`.* FROM `projects_users` WHERE `projects_users`.`project_id` = 151 AND (current_foreman = 1 )
etc...
我是不是误会了什么?这些记录不应该已经加载了吗?
我该怎么写才能只为ProjectsUser 运行一个查询?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 eager-loading