3

我为我正在使用的应用程序创建了一堆模型,我想使用 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 命令),这样我就不必为所有应该是的包制造种子数据自动生成?

谢谢。

4

0 回答 0