2013-08-07 86 views
1

我的Rails應用具有CSV上傳功能。它上傳電子郵件的CSV文件並將其保存在客戶數據庫中。Rails:上傳CSV文件時出錯 - 「驗證失敗:已發送電子郵件」

這是我上傳CSV觀點:

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

這是用戶模型上傳CSV:

def self.to_csv(options = {}) 
     CSV.generate(options) do |csv| 
      csv << column_names 
      all.each do |customer| 
       csv << customer.attributes.values_at(*column_names) 
      end 
     end 
    end 

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

而且在控制我的導入操作:

def import 
    current_user.customers.import(params[:file]) 
    redirect_to customers_path, notice: "Users imported." 
    end 

這在localhost上工作良好,但在服務器上,我在上傳CSV時出錯:

CustomersController# (ActiveRecord::RecordInvalid) "Validation failed: Email has already been taken" 

它正在爲一個CSV文件工作,而不是爲其他工作。

編輯:

就想通了,我的數據庫中有重複項。我對數據庫有唯一性驗證。其實用戶可以上傳CSV。所以我希望他們的記錄是唯一的,但一些用戶可能有共同的記錄。

那麼有人可以告訴我如何爲用戶生成獨特的記錄嗎?數據庫中的記錄可能是多餘的,但每個用戶都有唯一的記錄,沒有重複的記錄。

謝謝。

回答

0

似乎很明顯(至少對我而言),您正嘗試創建一個客戶,其中已有一個包含該電子郵件地址的Customer記錄。我看不到您的驗證,所以我假設該Customer模型中包含validates_presence_ofvalidates_uniqueness_of

確認您的CSV文件不包含具有相同電子郵件地址的客戶。

+0

嘿,我只是想通了,我的數據庫有重複的條目。我其實是從用戶那邊看的。我需要每個用戶擁有上傳客戶CSV文件的唯一記錄。但數據庫可能有重複的記錄。你能告訴如何做到這一點?謝謝。我也更新了我的問題。 – user2206724

+1

你可能想驗證它在一些東西的範圍內:'validates_uniqueness_of:email,:scope =>:user_id' –

+0

我知道它的工作。謝謝。 :-) – user2206724