我的 rails 应用程序具有 CSV 上传功能。它上传电子邮件的 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。所以我希望他们的记录是唯一的,但有些用户可能有共同的记录。
那么有人可以告诉我如何为用户生成唯一记录吗?数据库中的记录可能是多余的,但每个用户都有唯一的记录,没有重复的条目。
谢谢你。