2015-05-22 12 views
6

Tôi đang cố gắng để nhập dữ liệu CSV để DB mysql của tôi, nhưng tôi chạy vào một lỗi khi tôi cố gắng để tải lên các tập tin:Ruby on Rails 4 - nhập CSV - không chuyển đổi ngầm vào chuỗi

no implicit conversion of ActionDispatch::Http::UploadedFile into String 

đây là những gì một dòng trong file CSV trông giống như:

751,"01/17/2015","11:17:32","60","TDFSRDSK","2","10","-1","0","3","","26","3","","","1","0" 

đây là mã cho việc nhập khẩu, trong product.rb

def self.import(file) 
    CSV.foreach(file) do |row| 
    id, jour, heure, valeur, app, a, b, c, d, e, f, g, h, i, j, k, l = row 
    userid = current_user.id 
    product = Product.create(date: jour, valeur: valeur,user_id: userid) 
    end 
end 

trong produ ct_controller.rb

def import 
Product.import(params[:file]) 
redirect_to_root_url, notice "Products imported" 
end 

trong chỉ mục:

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

và trong routes.rb tôi có:

resources :products do 
collection {post :import} 
end 

Trả lời

14

Hãy thử cung cấp cho số params[:file].path trong đối số. Như thế này,

Product.import(params[:file].path) 

Thanh toán this.

+0

Cảm ơn tôi quản lý để loại bỏ các thông báo lỗi với giải pháp của bạn, bây giờ nó có vẻ hoạt động nhưng không có dữ liệu được thêm vào bảng SQL – dogg

+0

Khi tạo, hãy thử bằng cách sử dụng 'Product.create! (..)'. Vì vậy, nó sẽ trows ngoại lệ nếu có. –

+0

Cảm ơn, tôi đoán bản đồ dữ liệu của tôi với sql có vấn đề bởi vì tất cả chúng đều hiển thị là NULL và không có gì được tạo bởi vì tôi có "xác nhận" trên trường trong mô hình của tôi. Tôi sẽ cố gắng tìm đúng cách để lập bản đồ ip – dogg

1

Bạn cần phải làm như:

CSV.foreach(file.path) 

của bạn file đang giữ một phiên bản của lớp học ActionDispatch::Http::UploadedFile. Để biết đường dẫn, hãy sử dụng phương thức #path.

Các vấn đề liên quan