今でもよく分からない状態。
どうやってテストすればいいんだろう。。。
プロジェクトを適当に二つ作って、最初の方にメンバーを追加する、と。
そうすると、p.members_countが一つ減っていないといけないと思うんだけど、p.members_countはもともとゼロなんだそうです。
it "increment counter_cache when project has changed" do
p = Factory(:project)
p2 = Factory(:project)
m = p.members.create(:name => 'abc')
lambda do
put :update, :id => m, :project_id => p2
end.should change(@, :issues_count).by(-1)
end
ちなみに、counter_cacheのアップデート部分はこんな感じが今のところちゃんと動きます。
update_countersは使えなくなったのか、なんだか挙動不審。
increment/decrement_counterが中でupdate_countersを呼んでいるので、この方が正しい使い方のようです。
belongs_to :project, :counter_cache => true
before_save :update_counters
private
def update_counters
new_project = Project.find self.project_id
Project.increment_counter(:issues_count, new_project)
if self.project_id_was.present?
old_project = Project.find self.project_id_was
Project.decrement_counter(:issues_count, old_project)
end
end
0 件のコメント:
コメントを投稿