CollectionProxy在创建新对象时返回nil

时间:2013-09-10 22:00:51

标签: ruby-on-rails activerecord

我有一个具有通过嵌套表单构建的has_many关系的模型:

class User < ActiveRecord::Base
  has_many :properties
  accepts_nested_attributes_for :properties, allow_destroy: true

  def billing_address
    debugger
    properties.find_by(billing_address: true)
  end
end

总的来说,关系和嵌套表单有效。但是,如果我在创建过程中调用方法billing_address,那么即使存在billing_address设置为true的嵌套属性,它也会返回nil。我在调试器中对此进行了实验,看起来在创建期间调用properties.find_byproperties.where总是导致nil,即使参数与真实对象匹配。

当我在调试器中输入properties时,我得到这样的结果,这清楚地表明有一个属性,其billing_address设置为true:

#<ActiveRecord::Associations::CollectionProxy [#<User::Property id: nil, address: "1111 E 1st", city: "Austin", state: "TX", zip_code: "11111", phone_number: "11111111111", user_id: nil, primary: true, billing_address: true, created_at: nil, updated_at: nil>]>

那么为什么我不能通过properties.find_by(billing_address: true)之类的查询找到它?是否有其他方法来获取此数据?

1 个答案:

答案 0 :(得分:0)

find_bywhere搜索数据库(通过SQL查询),当您检查时,记录尚未保存,因此无法在那里找到它们。我知道无法“查找”代理,但如果您提供有关您尝试访问它们的上下文的更多信息,我可能会有一些想法。