2013-02-01 60 views
3

我遵循Import CSV Railscast,它很簡單。嘗試CSV導入時nil:NilClass的未定義方法`路徑'

我加require 'csv'config/application.rb

在我BuildingsController我創建了一個新的import行動,像這樣:

def import 
    Building.import(params[:file]) 
    redirect_to root_url, notice: "Buildings imported." 
end 

在我看來,我有這樣的:

<h2>Import Buildings</h2> 
<%= form_tag import_buildings_path, multipart: true do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag "Import" %> 
<% end %> 

這是在我的Building.rb模型中:

def self.import(file) 
    CSV.foreach(file.path, headers: true) do |row| 
    building = find_by_name(row["name"]) || new 
    building.attributes = row.to_hash.slice(*accessible_attributes) 
    building.save! 
    end 
end 

在我routes.rb,我有這樣的:

resources :buildings do 
    collection { post :import } 
    end 

當我點擊我的看法 '導入' 按鈕,我得到這個錯誤:

NoMethodError at /buildings/import 

Message undefined method `path' for nil:NilClass 
File /myapp/app/models/building.rb 
Line 23 

的思考?

+0

這意味着'PARAMS [:文件]''是,但nil'我看不出爲什麼它是除非你提交沒有選擇文件的形式 – jvnill

+0

哦哇...我很尷尬。我正在導入一個空的表單:(在我的應用中,表單的形式和樣式,它只有一個按鈕用於導入)我選擇了這個想法,我在按'select file'。我的壞的 如果添加作爲回答,我會接受它*隱藏臉* – marcamillion

+0

你去了,謝謝! – jvnill

回答

2

從評論:你是最有可能提交表單而不選擇一個文件:

相關問題