0

電話番号を持つ多くのクライアントをファイルからロードする必要があります

私のモデル クライアント :name has_many :telnumbers

電話番号:番号、:コメント

だから私はすくい仕事をしました

desc "Loads file clients from excell"
task :loadclientsfromfile do
require 'csv'  
require 'active_support/core_ext/hash'  

csv_text = File.read('c:\ddd1.csv')
csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
  telnumbers = row.to_hash.slice("number","comment")
  raw = row.to_hash.slice("name")
  raw = raw.to_hash.symbolize_keys
  telnumbers = telnumbers.to_hash.symbolize_keys
  telnumber1 = {}
  telnumber1["0"] = telnumbers
  raw[:telnumbers_attributes] = telnumber1
  Client.create!(raw)
end

そして私のCSVファイル:

name,number,comment
Second CLient,2343262,home

ハッシュを取得したい{:name=>"Second Client", :telnumbers_attributes=>{"0"=>{:number=>"2343262",:comment=>"home"}}}

しかし、私のコードは私のようではありません。乾かしてください。

4

1 に答える 1

1

これを試して

desc "Loads file clients from excell"
task :load_clients_from_file do 
  file_path = 'c:\ddd1.csv'  
  lines = IO.readlines(file_path, :encoding => 'ISO-8859-1')
  header = lines.shift.strip
  keys = header.split(/,/)
  lines.each do |line|
    values = line.strip.split(/,/)
    tel_hash = { "0" => {keys[1].to_sym => values[1], keys[2].to_sym => values[2]}}
    raw = {keys[0].to_sym => values[0], :telnumbers_attributes => tel_hash}
    Client.create!(raw)
  end
end

ここで、ハッシュの出力は次のようになります

{:name=>"Second CLient", :telnumbers_attributes=>{"0"=>{:number=>"2343262", :comment=>"home"}}}
于 2013-03-19T09:56:47.240 に答える