rake任务填充表中的新列

时间:2014-12-23 19:20:54

标签: ruby-on-rails database postgresql rake

我使用

在我的一个表中添加了一个新列
class AddLocationToHome < ActiveRecord::Mirgation
    def change
        add_column :home, :location, :string
    end
end

主表已经包含从从csv文件读取的rake任务填充的数据。 我将标题和新数据添加到我的csv文件中,但是如何运行我的rake来导入新的数据列呢?

我的rake导入是这样的

require 'csv'

namespace :db do
    desc "Import the location of existing homes"
    task :import_locations => environment do
         csv_text = File.read('db/imports/homes.csv')
         csv = CSV.parse(csv_text, :headers => true)
         csv.each do (row)
             !# not sure how to import just the new rows from the csv?
         end
     end
 end

谢谢!

1 个答案:

答案 0 :(得分:1)

你在那里有一个合理的开始。不过,在这个评论的空间内,您需要做的是:

  • 根据其他CSV列中的数据,在数据库中找到正确的Home实例。 (类似于Home.where(col1: row['col1']),但使用足够的列来获得正确的匹配。)
  • 使用新列更新该实例。 (home.update_attribute(location: row['location']

......然后到下一个。它会用一段时间来查询你的数据库,但唯一的办法是将整个表加载到内存中。