相关模型在更新后不会更新内存中的值



我有一个类似求职的网站。有Position个模型,每个位置都有许多Offers。当一个报价被接受时,其余的报价被拒绝并平仓。我的测试Offer按预期通过,但是,Position测试失败is_accepted因为nil

......
test "accept_offer flips is_accepted bits" do
    p = FactoryGirl.create(:position_with_offers, offers: 3)
    assert_nil e.offers[0].is_accepted # pass
    assert_nil e.offers[1].is_accepted # pass
    assert_nil e.offers[2].is_accepted # pass
    assert_equal false, p.is_closed    # pass
    p.accept_offer(e.offers[0])
    assert_equal true, p.is_closed              # pass
    assert_equal true, e.offers[0].is_accepted  # fail, == nil
    assert_equal false, e.offers[1].is_accepted # fail, == nil
    assert_equal false, e.offers[2].is_accepted # fail, == nil
end

。和。。。

class Position < ActiveRecord::Base
    has_many :offers, inverse_of: :position
    def accept_offer(_offer)
        offers.each do |o|
            if o.id == _offer.id
                o.accept
            else
                o.reject
            end
            o.reload
        end
        update({ is_closed: true })
    end
end

。和。。。

class Offer < ActiveRecord::Base
    def accept
        update_column(:is_accepted, true)
    end
    def reject
        update_column(:is_accepted, false)
    end
end

我读过应该调用.reload来刷新模型。我已经重新加载了所有东西,但没有成功。我尝试了update_allupdate_attributeupdate_column的变化,但报价总是nil。有趣的是,如果我puts position.accept_offer 中的值,则会呈现正确的值。

我需要做什么才能通过此测试?

重新加载优惠。

assert_equal true, e.offers[0].reload.is_accepted  # fail, == nil
assert_equal false, e.offers[1].reload.is_accepted # fail, == nil
assert_equal false, e.offers[2].reload.is_accepted # fail, == nil

最新更新