我有两个模型:Draft
和Pick
。我希望在Draft
创建后,current_pick
的ActiveRecord列Pick
增加1。
Inside Pick,我有一个方法可以将draft.current_pick
增加1:
class Pick < ActiveRecord::Base
belongs_to :draft
after_save :advance_draft
def advance_draft
draft.updraft
end
在draft
内,updraft是:
def updraft
self.current_pick += 1
end
我确保current_pick增加1的测试是:
it 'should run the advance_draft method after creating' do
team1 = FactoryGirl.create(:team)
team2 = FactoryGirl.create(:team_two)
cam = FactoryGirl.create(:player)
draft = FactoryGirl.create(:two_team_draft)
pick = Pick.create(:player_id => cam.id, :team_id => draft.team_at(draft.current_pick).id, :draft_id => draft.id, :draft_position => draft.current_pick)
draft.draft_position.should eq 2
end
在测试中正在创建pick
和draft
,但没有在正确的draft
上调用updraft方法,因为pick.draft.draft_position
在pick
之后保持为1 {1}}已创建。 (它应该增加到2)。
这是我的架构:
create_table "drafts", force: true do |t|
t.integer "draft_position"
t.integer "number_of_teams"
t.integer "PPTD"
t.integer "PPR"
t.integer "current_pick", default: 1
end
create_table "picks", force: true do |t|
t.integer "player_id"
t.integer "team_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "draft_id"
t.integer "draft_position"
end
我的问题是,如何在我的测试中正确增加pick.draft.current_pick
?
答案 0 :(得分:0)
我会做两件事,在更新计数以增加值并保存记录时使用increment!
,并且reload
您正在查看的对象,因为它的数据库表示已更改,因为它创建了。
def updraft
increment!(:current_pick)
end
这将更新current_pick
并一次保存对象。
it 'should run the advance_draft method after creating' do
# ... setup
draft.reload.draft_position.should eq 2
end
现在,不是使用在修改发生之前创建的draft
实例,而是使用版本当前的数据库。