我有一个accepts_nested_attributes_for
儿童模型的模型:
class ParentResource < ActiveRecord::Base
has_many :child_resources
accepts_nested_attributes_for :child_resources
after_create :log_child_resources
private
def log_child_resources
logger.debug "Child Resources: #{child_resources}"
end
end
不幸的是,即使child_resources作为嵌套属性提供,after_create
回调也不会记录任何child_resources。这些child_resources很快就会被保存并可访问,但此时我无法检查它们child_resources
。可能这是因为parent_resource在其嵌套子节点之前被保存,因此关联数组中还没有任何子节点。
所以我的问题是:在创建周期的这一点上,有没有办法访问child_resources?
答案 0 :(得分:0)
好吧,您可以尝试在自己的after_create回调中记录每个子资源。既然这些 记录尚未创建,您可以记录提供的属性:
logger.debug "Child Resources: #{child_resources_attributes}"
答案 1 :(得分:0)
改变这一点,
def log_child_resources
logger.debug "Child Resources: #{self.child_resources}"
end
基本上,当您创建父级时,没有与之关联的子级。所以,要测试一下。 让我们创建一个ChildResource并将其与新创建的Parent 关联,然后记录它。
如下所示,
def log_child_resources
# block the creates 10 children and associates
(1..10).each do |n|
ChildResource.create!(name: "TestName#{n}",parent_id: self.id)
end
# logging
logger.debug "Child Resources: #{self.child_resources.map &:name}"
end
假设您的child_resource模型名称为“ChildResource”,外键为“parent_id”,并且它具有“名称”列。