2014-04-17 60 views
3

我正在嘗試使用delayed_job將更大的csv導入到我的rails數據庫中。這裏是我的控制器和模型方法:delayed_job:使用handle_asynchronously時出現'undefined method'錯誤

控制器方法

def import 
    InventoryItem.import(params[:file], params[:store_id]) 
    redirect_to vendors_dashboard_path, notice: "Inventory Imported." 
end 

模型方法

def self.import(file, store_id) 
CSV.foreach(file.path, headers: true) do |row| 
inventory_item = InventoryItem.find_or_initialize_by_upc_and_store_id(row[0], store_id) 
inventory_item.update_attributes(:price => row.to_hash["price"], :updated_at => "#{Time.now}") 
    end 
end 

handle_asynchronously :import 

我已經添加了 'delayed_job的' 和 '守護' 我的Gemfile,然後捆綁在一起。運行生成器,啓動一個開發人員進程rake jobs:work,然後嘗試通過應用程序運行導入。這是我得到的錯誤:

Routing Error 
undefined method `import' for class `InventoryItem' 

我在集成delayed_job時錯過了什麼嗎?這個導入過程之前運行良好,所以只是想知道我在哪裏搞砸了。提前致謝!

回答

12

您導入一個類的方法,你應該handle_asynchronously呼籲模型類名的單例類:

可以使用元類招別名類方法:

class << self 
    def import(file, store_id) 
    CSV.foreach(file.path, headers: true) do |row| 
     inventory_item = InventoryItem.find_or_initialize_by_upc_and_store_id(row[0], store_id) 
     inventory_item.update_attributes(:price => row.to_hash["price"], :updated_at => "#{Time.now}") 
    end 
    end 
    handle_asynchronously :import 
end 

希望這有助於!

+0

因此,如果我理解正確,我將''inventory_item.rb'中的上述別名中的導入方法封裝起來?現在我在InventoryItemsController#import'錯誤中出現'NoMethod Error,指向'InventoryItem'上的調用'import'的行。思考? – settheline

相關問題