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"}}}
谢谢,这是一种有趣的方式。我的代码也可以工作,但我想让它更简单。。。这样我就能把它记在我的记忆里。