在Rails中,为什么在保存记录时会运行这些额外的查询?

时间:2011-12-14 15:26:07

标签: ruby-on-rails associations

$ rails console中,我注意到在保存记录时正在运行多个查询:

ruby-1.9.2-p180 :001 > ActiveRecord::Base.logger = Logger.new(STDOUT)
 => #<...> 
ruby-1.9.2-p180 :002 > p = Project.first
 Project Load (0.3ms)  SELECT `projects`.* FROM `projects` LIMIT 1
 => #<Project id: 1, category_id: 1, qualified_at: "2011-12-14 15:06:29", ...> 
ruby-1.9.2-p180 :003 > p.qualified_at = Time.now
 => 2011-12-14 10:11:42 -0500 
ruby-1.9.2-p180 :004 > p.save
  SQL (0.2ms)  BEGIN
  SQL (1.5ms)  SHOW TABLES
  AREL (0.3ms)  UPDATE `projects` SET `qualified_at` = '2011-12-14 15:11:42', `updated_at` = '2011-12-14 15:11:47' WHERE `projects`.`id` = 1
  Category Load (0.3ms)  SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 1 ORDER BY name LIMIT 1
  ProjectPerson Load (0.4ms)  SELECT `project_people`.* FROM `project_people` WHERE (`project_people`.project_id = 1 AND (project_people.is_client = 1)) LIMIT 1
  Person Load (0.3ms)  SELECT `people`.* FROM `people` WHERE (`people`.`id` = 2)
  ProjectTag Load (0.4ms)  SELECT DISTINCT `project_tags`.tag_id FROM `project_tags` WHERE (`project_tags`.project_id = 1)
  SQL (0.5ms)  COMMIT
 => true 

我的Project模型中没有过滤器之前或之后,我没有使用Observer。显然,这些查询与Project模型的关联有关,但为什么要运行查询?不知道还有什么要考虑的。感谢。

1 个答案:

答案 0 :(得分:0)

我只是想通了......我正在使用sunspot_rails gem并且正在更新该记录的索引:)这些是我的索引定义中引用的关联。

我会保留这个问题,以防其他人遇到类似的问题。