我正在寻找一种方法,与父对象中的子对象共享更多属性,而不仅仅是父对象,我正在调整父模型或子模型。例如,从父级创建一个孩子会自动包含特定的父属性
@kid = Parent.kids.create()
#=> {parent_id: parent_id, parent_attribute_1: parent_attribute_1, etc...}
答案 0 :(得分:1)
最干净的方法可能是拥有一个单独的构建器类来封装复制逻辑。例如:
# kidbuilder.rb
class KidBuilder
def self.create_kid_for(parent)
child = parent.kids.new
child.attr = parent.attr # repeat as necessary
child.save
child
end
end
# controller
@child = KidBuilder.create_kid_for(parent)
另一种方法是在before_create
上使用kid
回调,但这可能是一个坏主意,因为它强制创建每个kid
与parent
耦合。
另一方面,必须在多个地方维护相同的数据属性是非常痛苦的。如果kid
不会修改parent
的属性,请考虑使用delegate。