Rails种子与嵌套创建

时间:2012-09-24 22:45:49

标签: ruby-on-rails ruby-on-rails-3 seed

我为我正在使用的应用程序创建了一堆模型,我想使用seeds.rb文件播种它们。问题是,我已经在另一个模型中嵌套了一个模型的创建(不知道怎么说),这样当创建“Animal”时,它应该自动创建一组“Packages”。

为了说明,这是在我的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"
    )

没有构建相关的包,因为我已经在我的动物显示页面中构建了包的显示,如果我重置数据库并运行animals /#页面,我收到一个错误,表明没有包存在他们要显示的属性。

有没有办法让种子数据自动生成其关联数据(即,字面上调用我的create方法并遵循after_create命令),这样我就不必为所有包制作种子数据应该自动生成?

感谢。

0 个答案:

没有答案