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})
结束
结束
我有几个问题:

  • 由于标准的浏览器安全性,在使用csv处理文件之前,我必须上载并保存文件,以将其作为哈希分配给我的
    :content
    属性。。。这就是为什么我使用update_列来避免回调。有没有聪明的办法
  • 它不起作用!当返回视图时,rails告诉我它在需要散列时找到了一个数组

  • 使用更快的工具。以下是一些快速链接:

    [来源]

    [文件]

    [备忘单]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
    下访问