簡體   English   中英

導入CSV Rails 3不保存

[英]Import CSV Rails 3 Not Saving

我正在嘗試導入標准的csv文件,但似乎一切正常,但是,這只是不保存...

我正在嘗試導入我的客戶列表,而我客戶的控制者包含:

require 'csv'

 def csv_import 
     @parsed_file=CSV::Reader.parse(params[:dump][:file])
     n=0
     @parsed_file.each do |row|
         c=Customer.new
         c.businessname=row[1]
         c.contactname=row[2]
         c.address1=row[3]
         if c.save
             n=n+1
             GC.start if n%50==0
         end
         flash.now[:message]="CSV Import Successful,  #{n} new records added to data base"
     end
 end

在客戶的索引頁面上,添加了以下內容:

<%= form_for :csv_import, :html => { :multipart => true } do |f| -%>
 <table>
   <tr>
     <td>
      <label for="dump_file">
        Select a CSV File :
      </label>
     </td>
     <td >
      <%= f.file_field :file %>
     </td>
   </tr>
   <tr>
     <td colspan='2'>
        <%= f.submit "Upload", :disable_with => 'Uploading...' %>
     </td>
   </tr>
 </table>
<% end -%>

當我點擊上載時,我被重定向到創建客戶頁面,並且看到一條錯誤消息:

Business Name cannot be blank 

哪個看上去並沒有實際保存數據?

任何幫助將不勝感激。

我認為您的驗證阻止了保存。 在您的控制器中,而不是使用c.save ,請嘗試c.save(:validate => false) 讓我知道如何解決。

我不相信ActiveRecord::Base.save在Rails 3中可以做任何事情。您需要使用create方法。 http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-create

@parsed_file.each do |row|
  Customer.create do |new_cust|
    new_cust.attribute_1 = row[1]
    new_cust.attribute2 = row[2]
    # etc...
  end
end

如下所述,如果您獲得了預期的結果,並且您認為代碼正確,請檢查irb中的解析結果。 在irb中輸入以下代碼。

require 'csv'
path = "c:\path\to\file.csv"
CSV.foreach path do |row|
  puts row[0]
  puts row[1]
end

如果該輸出看起來像預期的那樣,則問題出在代碼的其他地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM