私は、Rails 4アプリケーションでCSVインポートを(this repoに基づいて)動作させることができました。私の開発システムでは、インポートが正しく動作するように見えますが、運用環境ではすべてのレコードが重複してしまうという問題があります。以下の既存のコードを参照してください。何が重複を引き起こしている可能性がありますか?すべてのレコードはCSVに一度だけ表示され、システムに割り当てを割り当てたいので空のID列がすべてあります。Rails CSVインポート重複レコード
books_controller.rb
def import
begin
Book.import(params[:file])
redirect_to root_url, notice: "Books imported."
rescue
redirect_to root_url, notice: "Invalid CSV file format."
end
end
def create
@book = Book.new(book_params)
@book.save
save_previews(params[:previews])
respond_with(@book)
end
def save_previews images
if images
images.each_value { |image|
@book.previews.create(image: image)
}
end
end
book.rb
def self.import(file)
CSV.foreach(file.path, headers: true, :encoding => 'utf-8') do |row|
product_hash = row.to_hash
product = Book.where(id: product_hash["id"])
if product.count == 1
product.first.update_attributes(product_hash)
else
Book.create!(product_hash)
end # end if !product.nil?
end # end CSV.foreach
end # end self.import(file)
routes.rbを
resources :books do
get "books/:page", :action => :index, :on => :collection
resources :comments
collection do
post :import
end
end
ユーザー#はshow.html.erb
<% if user_signed_in? && current_user.super_admin? %>
<%= form_tag import_books_path, multipart: true do %>
<div class="form-group">
<%= file_field_tag :file %>
<%= submit_tag "Import CSV", class: "form-control" %>
</div>
<% end %>
<% end %>
:ここ
は簡単な例です。たとえば、アクティブなレコードを使用していることを確認したいとします。 – Dbz
私はアクティブレコードyesを使用しています。 – user3141095