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

Ruby on rails 通过rake任务更新不同模型中的字段,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我有一个产品模型,有一个类别栏。用户可以在同一字段中保存多个逗号分隔的值 我刚刚完成了数据库的重构,因此创建了一个categories表和categories\u products join 如何在使用相应的category_id和product_id更新联接表的同时使用categories更新categories模型 到目前为止,这就是我在rake任务中所做的,它基本上只是将类别从products表中分离出来 Product.find(:all).each do |k| k.categor

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

我刚刚完成了数据库的重构,因此创建了一个categories表和categories\u products join

如何在使用相应的category_id和product_id更新联接表的同时使用categories更新categories模型

到目前为止,这就是我在rake任务中所做的,它基本上只是将类别从products表中分离出来

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

也许是这样的:

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

这是一个良好的开端。假设您使用的是HABTM关联,并且单词
类别
没有冲突(即,您的新表类似于Cats):

Product.find(:all)|
产品.类别.拆分(“,”).每个do |类别|
如果存在猫?(名称:类别)
product.cats.create(名称:category)
其他的

product.cats基于您的响应,我最后这样做:
def self.add_kcsid product.find(:all)。每个do | k | k.category_名称。拆分(“,”)。每个do | w | k.tags.create(:cat_name=>w.strip.to| s)end
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