通过rake任务更新不同模型中的字段

时间:2012-08-08 17:44:49

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

我有一个产品型号,带有类别列。用户可以在同一个字段中保存多个逗号分隔值。

我刚刚完成了对数据库的重构,因此创建了一个类别表和一个categories_products连接。

如何使用类别更新我的类别模型,同时还使用相应的category_id和product_id更新连接表。

这是我到目前为止在rake任务中所拥有的,它基本上只是将类别与products表分开。

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

2 个答案:

答案 0 :(得分:0)

也许是这样的:

Product.find(:all).each do |k|
  k.categories.split(",").each do |w|
    Category.create(:description => w, :product_id => k.id)
  end
end

答案 1 :(得分: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

此外,由于这是一次性操作,而不是将要执行多次的任务,因此这可能是数据库迁移的更好选择。这意味着它需要在up/downchange分组中,并且具有反函数。