修改模型,以便Rails创建通过父接收多于父ID

时间:2015-07-29 17:36:19

标签: ruby-on-rails activerecord

我正在寻找一种方法,与父对象中的子对象共享更多属性,而不仅仅是父对象,我正在调整父模型或子模型。例如,从父级创建一个孩子会自动包含特定的父属性

@kid = Parent.kids.create()

#=> {parent_id: parent_id, parent_attribute_1: parent_attribute_1, etc...}

1 个答案:

答案 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回调,但这可能是一个坏主意,因为它强制创建每个kidparent耦合。

另一方面,必须在多个地方维护相同的数据属性是非常痛苦的。如果kid不会修改parent的属性,请考虑使用delegate