Ruby on rails Rails ActiveRecord:如果在创建前未设置关联,则计数器缓存未更新。故意的

Ruby on rails Rails ActiveRecord:如果在创建前未设置关联,则计数器缓存未更新。故意的,ruby-on-rails,activerecord,observer-pattern,counter-cache,Ruby On Rails,Activerecord,Observer Pattern,Counter Cache,我已经用:counter\u cache=>true实现了一个“属于”关系,并且我注意到,如果在初始保存之前未设置该关系,则计数器缓存不会得到更新 例如,假设一家公司有很多员工。如果我这样做 company.employees << Employee.new(:name => "Joe") company.employees“乔”) 计数器得到正确更新,但如果我这样做 company.employees << Employee.create(:name =>

我已经用:counter\u cache=>true实现了一个“属于”关系,并且我注意到,如果在初始保存之前未设置该关系,则计数器缓存不会得到更新

例如,假设一家公司有很多员工。如果我这样做

company.employees << Employee.new(:name => "Joe")
company.employees“乔”)
计数器得到正确更新,但如果我这样做

company.employees << Employee.create(:name => "Joe")
company.employees“乔”)
计数器保持不变

有关更多详细信息,请参见以下模型:

class Employee < ActiveRecord::Base
  belongs_to :company, :counter_cache => true
end

class Company < ActiveRecord::Base
  has_many :employees
end
class Employeetrue
终止
类公司
下面是一个Rails控制台会话,演示了这一点:

Loading development environment (Rails 3.0.5)
ruby-1.9.2-p180 :001 > company_a = Company.create(:name => "ACME")
 => #<Company id: 1, name: "ACME", created_at: "2011-07-22 01:31:39", updated_at: "2011-07-22 01:31:39", employees_count: 0> 
ruby-1.9.2-p180 :002 > company_a.employees << Employee.new(:name => "Bob")
 => [#<Employee id: 1, company_id: 1, name: "Bob", created_at: "2011-07-22 01:31:59", updated_at: "2011-07-22 01:31:59">] 
ruby-1.9.2-p180 :003 > company_a.reload
 => #<Company id: 1, name: "ACME", created_at: "2011-07-22 01:31:39", updated_at: "2011-07-22 01:31:39", employees_count: 1> 
ruby-1.9.2-p180 :004 > company_a.employees << Employee.create(:name => "Joe")
 => [#<Employee id: 1, company_id: 1, name: "Bob", created_at: "2011-07-22 01:31:59", updated_at: "2011-07-22 01:31:59">, #<Employee id: 2, company_id: 1, name: "Joe", created_at: "2011-07-22 01:32:28", updated_at: "2011-07-22 01:32:28">] 
ruby-1.9.2-p180 :005 > company_a.reload
 => #<Company id: 1, name: "ACME", created_at: "2011-07-22 01:31:39", updated_at: "2011-07-22 01:31:39", employees_count: 1> 
加载开发环境(Rails 3.0.5)
ruby-1.9.2-p180:001>公司a=company.create(:name=>“ACME”)
=> # 
ruby-1.9.2-p180:002>公司员工“鲍勃”)
=> [#] 
ruby-1.9.2-p180:003>公司
=> # 
ruby-1.9.2-p180:004>公司员工“乔”)
=> [#, #] 
ruby-1.9.2-p180:005>公司
=> # 
文档确实说,当创建/销毁对象时,计数器会递增/递减,但我认为它也应该监视更新,这样才有用。否则,比如说,在公司之间调动员工会很快导致柜台完全关闭

这是预期的行为吗?如果是,理由是什么?如果不是,我做错什么了吗?我在Rails 3.0.5和Ruby 1.9.2中尝试过这个


谢谢

你能用模型代码清单的复制粘贴更新你的帖子吗?同样的问题发生在这里,使用Ruby 1.9.2的Rails 3.1.1,你能用模型代码清单的复制粘贴更新你的帖子吗?同样的问题发生在这里,使用Ruby 1.9.2的Rails 3.1.1