【问题标题】:ruby on rails import csv from upload file to Active Records using Smarter csvruby on rails 使用 Smarter csv 从上传文件到 Active Records 导入 csv
【发布时间】:2014-11-01 13:46:02
【问题描述】:

我在这里遇到了障碍,需要帮助。我希望能够将 csv 文件导入我的 Active Record。使用 SmarterCSV 或其他方式

这是我的数据库

create_table "ques", force: true do |t|
    t.integer  "rikt_nr"
    t.integer  "start_nr"
    t.integer  "end_nr"
    t.datetime "created_at"
    t.datetime "updated_at"
end

这是我的看法

<h2>Import Ques</h2>  

<%= form_tag import_ques_path, multipart: true do %>  
   <%= file_field_tag :file %>  
   <%= submit_tag "Import" %>  
<% end %> 

这是我的路线

resources :ques do  
  collection { post :import }  
end  
  root to: 'ques#index' 

和我的控制器

def import  
  Que.import(params[:file])  
   redirect_to root_url, notice: "Ques imported."  
end 

和模型

def self.import(file)  
  CSV.foreach(file.path, headers: true) do |row|  
   Que.create! row.to_hash  
  end  
end  

csv 文件看起来像这样

Id;Rikt nr;Start nr;End nr;Created at;Updated at
1;8;4486550;4486650;October 28, 2014 08:42;October 28, 2014 08:42
2;8;4486700;4486755;October 28, 2014 08:42;October 28, 2014 08:42

我查看了各种指南,但我无法让它发挥作用。

【问题讨论】:

  • 你在哪里表示你的分隔符是分号而不是逗号?
  • Dosent smartercsv 修复该问题?
  • 对不起,我复制了太多你的代码。跳过.to_hash。我更新了我的答案。

标签: ruby-on-rails csv import rails-activerecord smartercsv


【解决方案1】:

首先:您的示例中没有使用 smarter_csv,而是使用标准的 Ruby CSV。
第二:smarter_csv 提供了指定分隔符的选项,但auto detect 没有。

总之,你import 应该是这样的

def self.import(file)  
  SmarterCSV.process(file.path, col_sep: ';') do |row|  
   Que.create! row 
  end  
end  

【讨论】:

  • 我确实添加了你的代码,它只是说“未定义的方法`to_hash'”
  • 对不起,我复制了太多你的代码。跳过.to_hash。我更新了我的答案。
  • thx Martin,我现在一直在处理 csv 文件,现在我明白了。谢谢你的帮助!!
【解决方案2】:

对于其他对此有疑问的人。这就是我解决它的方法。首先将 csv 文件更改为以“,”作为分隔符

然后使用我的代码,但是将控制器更改为这个

def import
      csv_file = params[:file].read
      CSV.parse(csv_file) do |row|
      ques = Que.create(rikt_nr: row[0], start_nr: row[1], end_nr: row[2])
      ques.save
    end
 redirect_to ques_path, notice: "Que added"

end

它可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 2016-03-24
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多