RSpec has_many通过# 在after_save上

问题描述 投票:0回答:1

这是我的关系模型

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!

这就是我所说的byebug。 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)
[]
ruby-on-rails ruby activerecord
1个回答
1
投票

问题是别名还没有持久化并且pluck进行数据库查询(当你检查address_aliases时,看到记录还没有ID,它在内存上,它还没有在数据库上)。

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

© www.soinside.com 2019 - 2024. All rights reserved.