0

カテゴリ列のある製品モデルがあります。ユーザーは、同じフィールドに複数のコンマ区切り値を保存できました。

DBのリファクタリングが完了したので、categoriesテーブルを作成すると、categories_productsが結合します。

対応するcategory_idとproduct_idで結合テーブルを更新しながら、カテゴリでカテゴリモデルを更新するにはどうすればよいですか。

これは私がこれまでのレーキタスクで持っているものであり、基本的にはカテゴリを製品テーブルから分離しただけです。

Product.find(:all).each do |k|
  k.categories.split(",").each do |w|
    puts k.id + " " + w
  end
end
4

2 に答える 2

0

多分このようなもの:

Product.find(:all).each do |k|
  k.categories.split(",").each do |w|
    Category.create(:description => w, :product_id => k.id)
  end
end
于 2012-08-08T17:48:53.140 に答える
0

これは良いスタートです。HABTM アソシエーションを使用していて、単語に衝突がないと仮定しますcategory(つまり、新しいテーブルは Cats のようなものです):

Product.find(:all).each do |product|
  product.categories.split(",").each do |category|
    if Cats.exists?(name: category)
      product.cats.create(name: category)
    else
      product.cats << Cats.find_by_name(category)
    end
  end
end

また、これは何度も実行されるタスクではなく、1 回限りの操作であるため、おそらく DB 移行のより良い候補です。つまり、up/downまたはchangeグループ化の内側に、逆関数を記述する必要があります。

于 2012-08-08T17:53:32.253 に答える