2012-02-03 43 views
1

我有这样的模式:的Rails:上传CVS文件来处理它作为哈希

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 

我有几个问题:

  1. 由于标准的浏览器的安全性,我要上传的文件,并保存它与CSV处理之前,为什么我使用update_column避免回调其分配作为哈希我:content属性......这就是。有没有一个聪明的方法来做到这一点?
  2. 它不工作!当回视图轨告诉我,它找到了一个数组时,它预计的哈希值。
+0

你尝试过什么?你看了什么?你有没有使用“rails文件上传”? – Thilo 2012-02-03 11:47:30

+0

欢迎来到Stack Overflow!请不要仅仅因为你已经解决了你的问题。您的答案应作为答案发布,而不是编辑到问题中。谢谢! – 2012-02-09 22:48:31

回答

-2

使用faster_csv宝石。这里有一些快速链接:

[SOURCE] https://github.com/JEG2/faster_csv

[DOCS] http://fastercsv.rubyforge.org/

[cheatsheet文件] http://cheat.errtheblog.com/s/faster_csv/

请做一些R于GitHub的& d粘贴问题之前,这些问题已经在那里。

+0

嗡嗡声,好吧我明白我的问题有2合一,所以遇到我编辑它,所以它更清晰,你可能不会回答^ _^ – Timoun 2012-02-03 12:33:35

+0

faster_csv是轨道3的一部分,它可以在'CSV'下访问 – 2012-02-06 07:03:53

0
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 

我的产品类有寻找小写/ spacefree头和它们相匹配的产品领域的import_hash方法。

product.name = hash['productname'] || hash['name'] #for example.