Мне удалось получить импорт CSV (на основе this repo) в приложении Rails 4. Проблема в том, что в моей системе разработки импорт работает правильно, но в производстве все записи дублируются. См. Действующий код ниже. Любые идеи, которые могут вызвать дублирование? Все записи отображаются только в CSV, все имеют пустые столбцы идентификаторов, так как я хочу, чтобы система назначила назначающие.Rails CSV Import Duplicating Records
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
Я использую активную запись да. – user3141095