我有一个具有通过嵌套表单构建的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_by
或properties.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)
之类的查询找到它?是否有其他方法来获取此数据?
答案 0 :(得分:0)
find_by
和where
搜索数据库(通过SQL查询),当您检查时,记录尚未保存,因此无法在那里找到它们。我知道无法“查找”代理,但如果您提供有关您尝试访问它们的上下文的更多信息,我可能会有一些想法。