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。所以我希望他們的記錄是唯一的,但一些用戶可能有共同的記錄。
那麼有人可以告訴我如何爲用戶生成獨特的記錄嗎?數據庫中的記錄可能是多餘的,但每個用戶都有唯一的記錄,沒有重複的記錄。
謝謝。
嘿,我只是想通了,我的數據庫有重複的條目。我其實是從用戶那邊看的。我需要每個用戶擁有上傳客戶CSV文件的唯一記錄。但數據庫可能有重複的記錄。你能告訴如何做到這一點?謝謝。我也更新了我的問題。 – user2206724
你可能想驗證它在一些東西的範圍內:'validates_uniqueness_of:email,:scope =>:user_id' –
我知道它的工作。謝謝。 :-) – user2206724