2012-08-08 71 views
0

我有一个产品型号,带有类别列。用户可以在同一字段中保存多个逗号分隔值。通过rake任务更新不同模型中的字段

我刚刚完成重构我的数据库,所以通过创建一个类别表和一个categories_products连接。

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

这是我迄今在耙子任务中所具有的功能,它基本上只是将产品表中的类别分开。

回答

0

这是一个良好的开端。假设你使用的是HABTM关联,并且有上的字category没有碰撞(即新表是像猫):

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分组内,并具有写入的反函数。

+0

根据你的回应,我最终这样做了:'def self.add_kcsid Product.find(:all).each do | k | k.category_names.split(“,”)。each do | w | (:cat_name => w.strip.to_s) end end end' – Yogzzz 2012-08-08 21:59:06

0

也许是这样的:

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