Ruby on rails 嵌套哈希和rake任务

Ruby on rails 嵌套哈希和rake任务,ruby-on-rails,ruby,hash,nested,Ruby On Rails,Ruby,Hash,Nested,我必须从文件中加载许多带有电话号码的客户 我的模特客户:姓名 你有很多电话号码吗 电话号码:号码,:备注 所以我完成了这个任务 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,

我必须从文件中加载许多带有电话号码的客户

我的模特客户:姓名 你有很多电话号码吗

电话号码:号码,:备注

所以我完成了这个任务

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=>“第二个客户端”,:telnumbers\u attributes=>{“0”=>{:number=>“2343262”,:comment=>“home”}}

但是我的代码和我不一样。请帮我把它擦干。

试试这个

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"}}}

谢谢,这是一种有趣的方式。我的代码也可以工作,但我想让它更简单。。。这样我就能把它记在我的记忆里。