Ruby on rails Rails:上传cvs文件以将其作为散列进行处理
我有这个模型:Ruby on rails Rails:上传cvs文件以将其作为散列进行处理,ruby-on-rails,csv,hash,Ruby On Rails,Csv,Hash,我有这个模型: class Survey < ActiveRecord::Base attr_accessor :csvFile_file_name has_attached_file :csvFile, :path => ":rails_root/public/:class/:attachment/:id/:style_:basename.:extension" serialize :content, Hash #after_save :do_cvs_proces
class Survey < ActiveRecord::Base
attr_accessor :csvFile_file_name
has_attached_file :csvFile, :path => ":rails_root/public/:class/:attachment/:id/:style_:basename.:extension"
serialize :content, Hash
#after_save :do_cvs_process
def do_csv_process
product = {}
FasterCSV.foreach(self.csvFile.path, :headers => true, :col_sep => ",") do |row|
row.to_hash.each do |key, value|
product[key.underscore.to_sym] = value
end
end
self.update_column(:content, {:first => product})
end
end
班级调查“:rails\u root/public/:class/:attachment/:id/:style\uu:basename.:extension”
序列化:内容、哈希
#保存后:执行cvs\U进程
def do_csv_过程
乘积={}
FasterCSV.foreach(self.csvFile.path,:headers=>true,:col_sep=>“,”)do|row|
row.to_hash.each do|键,值|
产品[键.下划线.至符号]=值
结束
结束
update_列(:content,{:first=>product})
结束
结束
我有几个问题:
:content
属性。。。这就是为什么我使用update_列来避免回调。有没有聪明的办法使用更快的工具。以下是一些快速链接: [来源] [文件] [备忘单]http://cheat.errtheblog.com/s/faster_csv/ 在粘贴问题之前,请在GitHub上进行一些研发,这些问题已经存在
def self.import_csv_file(iFileName)
c = CSV.open iFileName
header= c.first.map{ |i| i.to_s.strip.downcase; }
c.each { |row| import_hash( Hash[*header.zip(row).flatten] ); }
c.close
end
我的产品类有一个import_散列方法,它查找小写/无空格的标题,并将它们与产品中的字段相匹配
product.name = hash['productname'] || hash['name'] #for example.
你试过什么吗?你看了什么?你在谷歌上搜索过“rails文件上传”吗?欢迎来到Stack Overflow!请不要因为你已经解决了问题就删除它。您的答案应该作为答案发布,而不是编辑到问题中。谢谢哼哼,好吧,我知道我的问题是二合一的,所以见了我就编辑它,这样就更清楚了,你可能不会在一旁回答^ ^更快^ csv是rails 3的一部分,只能在
csv
下访问