Hau*_*eth 0 ruby csv activerecord ruby-on-rails fastercsv
我编写了从CSV加载数据到DB的方法.对我而言,它有点不合时宜,而且远离DRY:
def self.from_csv(data)
c = Company.new
FasterCSV.parse(data) do |row|
c.name = row[0]
c.street = row[1]
c.street_number = row[2]
c.apartament_number = row[3]
c.city = row[4]
c.post_code = row[5]
c.post_office_city = row[6]
c.nip = row[7]
c.regon = row[8]
c.vatin = row[9]
end
end
Run Code Online (Sandbox Code Playgroud)
如何使它更性感或可能已经有任何lib加载数据?
你可以把性感的女士放在上面:
# ___
# _ _.-"_< }
# ""--"" 7(
# /())
# / )/
# ^ ( \
# / /
# /.'
# //
# ______/L___ sexii
def self.from_csv(data)
#...
end
Run Code Online (Sandbox Code Playgroud)
但是,严肃地说,我看到你的代码唯一的问题是你不能轻易地重新排列属性,因为你必须手动更新所有索引.我更喜欢在数组中有一个有序的属性列表,并使用一些Ruby的动态方法调用:
def self.from_csv(data)
company = new
row = CSV.parse_line(data)
[:name, :street, :street_number, :apartament_number,
:city, :post_code, :post_office_city,
:nip, :regon, :vatin].each_with_index do |name, i|
company.send(:"#{name}=", row[i])
end
company
end
Run Code Online (Sandbox Code Playgroud)
另请注意,您需要在结尾处返回构造的公司实例,否则在调用时将获得一些随机值Company.from_csv.