RSpec has_many通过after_save上的#<activerecord :: associations :: collectionproxy>

时间:2019-04-22 13:20:19

标签: ruby-on-rails ruby activerecord

这里是我的关系模型

class Address < ApplicationRecord
    has_many :address_aliases, :inverse_of => :address, :foreign_key => :address_id
end

在规范中,我正在使用address_aliases建立一个地址。在我的地址的after_save中,我在某处使用了address.address_aliases.pluck,但它没有给出正确的值。

address_aliases = FactoryGirl.build_list(:address_alias, 1, :alias_for_city => "TEST1")
address = FactoryGirl.build(:some_address, :company_id => "test_company", :address_aliases => address_aliases)
byebug
expect ...
address.save!

这就是我遇到的问题。 address.address_aliases有一个元素,但是当我选择它时,它返回空白数组。

(byebug) address.address_aliases
#<ActiveRecord::Associations::CollectionProxy [#<AddressAlias id: nil, alias_for_city: "TEST1", created_at: nil, updated_at: nil, address_id: nil>]>
(byebug) address.address_aliases.pluck(:alias_for_city)
[]

1 个答案:

答案 0 :(得分:1)

问题在于别名尚未持久化,并且pluck进行数据库查询(请参阅检查address_aliases时,记录还没有ID,它在内存中,不在内存中)数据库呢。

pluck替换为map(&:alias_for_city),这样它就不会执行数据库查询,而是使用已经加载的集合。