0

私はレシピの表、材料の表、および関連付けの表を持っています(レシピは「多くの」材料を持っており、材料は「多くの」材料を持っている」)。アソシエーションテーブルのコントローラーまたはモデルがありません。

関連付けテーブルをランダムな(まだ有効な)データで埋めるタスクを作成したいと思います。アソシエーションテーブルの有効なIDを生成するコードを作成しましたが、アソシエーションテーブルに配置する方法がわかりませんでした(モデルがないため)。

どういうわけかレシピを繰り返して、recipe.ingredientsリストにデータを追加できますか?アソシエーションテーブルは自動的に埋められますか?

これまでの私のコード:

namespace :FillRandomAssociationData do

desc "Fills the recipes - ingredients association table with random data"
task :Recipe_Ingredients_Association => :environment do
  Recipe.all.each do |rec|
    numOfIngredientsPerRecipe =  rand(3)
    ingredientIDLimit = Ingredient.count

    for i in 0..numOfIngredientsPerRecipe
      ingRandId = rand(ingredientIDLimit)
      .... This is where I got stuck...
    end
  end
end

終わり

ありがとう、李

4

1 に答える 1

1

レシピ オブジェクトに材料を入力して保存するだけで、Rails が関連付けテーブルに入力します。

desc "Fills the recipes - ingredients association table with random data"
task :Recipe_Ingredients_Association => :environment do
  Recipe.all.each do |rec|
    numOfIngredientsPerRecipe =  rand(3)
    ingredientIDLimit = Ingredient.count

    for i in 0..numOfIngredientsPerRecipe
      ingRandId = rand(ingredientIDLimit)
      rec.ingredients << Ingredient.find(ingRandId)          
    end

    rec.save!
  end
end

このアルゴリズムを使用すると、同じ材料をレシピに何度も追加できることに注意してください。

于 2012-06-15T20:20:02.180 に答える