这里是我的关系模型
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)
[]
答案 0 :(得分:1)
问题在于别名尚未持久化,并且pluck
进行数据库查询(请参阅检查address_aliases
时,记录还没有ID,它在内存中,不在内存中)数据库呢。
将pluck
替换为map(&:alias_for_city)
,这样它就不会执行数据库查询,而是使用已经加载的集合。