3

使用しているアプリ用に多数のモデルを作成しました。seeds.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"
    )

関連するパッケージを構築しません。動物の表示ページにパッケージの表示を組み込んだため、dbをリセットしてanimals /#ページを実行すると、属性のパッケージが存在しないことを示すエラーが発生します。表示されます。

シードデータを取得して関連データを自動的に生成する方法はありますか(つまり、文字通りcreateメソッドを呼び出してafter_createコマンドに従う)、必要なすべてのパッケージのシードデータを作成する必要はありません。自動生成?

ありがとう。

4

0 に答える 0