从连接表模型更新关联记录

时间:2010-01-13 23:06:13

标签: ruby-on-rails activerecord persistence save has-many-through

我有一个has_many:通过关系将玩家与团队联系起来。

我想在团队表上有一个计数器(有点像计数器缓存),它告诉我自本周开始以来有多少新关联。当然,计数器缓存不会起作用,因为它总是会给出所有已创建的关联。

我尝试过在管理模型中更新相关团队。这永远不会成功。即使相关团队的增量似乎已保存,但在创建关联后,我的计数器仍为0。

我也尝试过使用观察者。观察者按照我的预期被召唤,我能够找回团队,但是再次对其进行的任何更新都没有保存。

我确定我错过了一些明显的东西!实现这个的轨道方式是什么?

我设置了一个github来说明问题,运行rake规范会失败。

http://github.com/steveybaby/assoc_problem

2 个答案:

答案 0 :(得分:0)

我怀疑问题在于你命名了计数器字段changes,它已经是一个ActiveRecord方法,用于检查自上次保存以来对记录属性的更改。尝试更改该字段的名称,看看您的代码是否有效。

答案 1 :(得分:0)

在您的规范中:

fanteam_spec.rb

it "should be able to create a fanteam" do
    @fanteam.save
    @fanteam.changes.should be(0)
    @fanteam.should be_valid
    @fanteam.players << Factory.build(:player)

    @fanteam.reload # this is what you are forgetting

    @fanteam.changes.should be(1)
  end

基本上你的观察者更新相同的记录,但不是同一个对象。