我有一个大型CSV文件,我希望填充一个模型,一旦用CSV填充列,该模型就不会更改。我也有我认为将采用CSV并将其添加到数据库模型的方法。我不知道在哪里放这个方法以及如何调用它?
目前我在rails应用程序中的.rb文件中有方法,并且我从终端调用它。但我收到以下错误:
ruby postcode.rb
postcode.rb:6:in `block in <main>': uninitialized constant Place (NameError)
from postcode.rb:5:in `each'
from postcode.rb:5:in `<main>'
Method / .rb file:
这是我解析CSV并将数组中的每个数组添加到&#39; Place&#39;的方法。模型。
require 'csv'
csv_text = File.read('GB_full.csv')
csv = CSV.parse(csv_text, :headers => false)
csv.each do |row|
Place.create!(row.to_hash)
end
型号:
class CreatePlaces < ActiveRecord::Migration
def change
create_table :places do |t|
t.string :country_code
t.string :postal_code
t.string :place_name
t.string :admin_name_1
t.string :admin_code_1
t.string :admin_name_2
t.string :admin_code_2
t.string :admin_name_3
t.string :admin_code_3
t.string :latitude
t.string :longitude
t.string :accuracy
t.timestamps null: false
end
end
end
答案 0 :(得分:1)
我会把它放在迁移中。如果您认为您可能希望在某个时刻再次执行此操作,那么将大部分代码作为类方法(采用csv文件名)放在模型中,然后从迁移中调用它。
答案 1 :(得分:1)
我首先会向Place
模型添加一个方法,然后你可以在之后/当你的模型变得臃肿时重构它
require 'csv'
class Place < ActiveRecord::Base
def self.import_from_csv(text)
CSV.parse(text, :headers => false).each do |row|
create!(row.to_hash)
end
end
end
并将其称为:
csv_text = File.read('GB_full.csv')
Place.import_from_csv(csv_text)