我为我正在使用的应用程序创建了一堆模型,我想使用 seed.rb 文件为它们播种。问题是,我将一个模型的创建嵌套在另一个模型中(不知道怎么说),这样当创建“动物”时,它应该自动创建一组“包”。
为了说明,这是在我的 animal.rb 文件中(细节不重要——它只是根据输入的动物数据构建一组包):
after_create :create_packages
def create_packages
@cut_list = Cut.where(:animal_type => self.animal_type)
@cut_list.each do |c|
Package.create!(:animal_id => self.id, :cut_id => c.id,
:original => (self.weight * (c.percent)/100) / c.package_weight,
:left => (self.weight * (c.percent)/100) / c.package_weight)
end
end
换句话说,属于动物的包是在创建动物时自动创建的——如果动物是在我的应用程序上创建的。但是,使用种子,只需这样做:
Animal.create(
:name => 'Donald Trump',
:animal_type => "Pig",
:breed => "Hungarian",
:weight => 800,
:farm => "The Piggie Farm",
:photo => "NA"
)
没有构建相关的包,并且由于我已经在我的动物展示页面中构建了包的显示,如果我重置数据库并运行动物/#页面,我会收到一个错误,提示它们的属性不存在包被显示。
有什么方法可以让种子数据自动生成其关联数据(也就是说,从字面上调用我的 create 方法并遵循 after_create 命令),这样我就不必为所有应该是的包制造种子数据自动生成?
谢谢。