使用しているアプリ用に多数のモデルを作成しました。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コマンドに従う)、必要なすべてのパッケージのシードデータを作成する必要はありません。自動生成?
ありがとう。