1

我有一个通过嵌套表单构建的具有 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,则它返回 nil,即使存在一个将 billing_address 设置为 true 的嵌套属性。我在调试器中对此进行了试验,似乎调用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)?是否有另一种获取这些数据的方法?

4

1 回答 1

0

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

于 2013-09-10T22:20:56.273 回答