2013-12-18 46 views
0

我有一個系統使用CSV上傳更新InventoryItem記錄。Rails CSV上傳更新記錄 - 屬性沒有保存到分區

我有這樣的控制方法:

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

Which of course calls this model method: 

def self.import(file, store_id) 
    CSV.foreach(file.path, headers: true) do |row| 
    inventory_item = InventoryItem.find_or_initialize_by_code_and_store_id(row[0], store_id) 
    inventory_item.update_attributes(:price => row.to_hash.slice(:price)) 
     end 
    end 

我想更新只在更新:price屬性,因爲和:code:store_id不會改變。目前正在導入的記錄的價格都是0.0(十進制大)。不是零,也不是正確的值,但0.0,很明顯,我做錯了這個工作。我知道我這樣做是在控制檯中時,它看起來是這樣的:

inventory_item = InventoryItem.find_by_id(1) 
inventory_item.update_attributes(:price => 29.99) 

爲什麼我無法正常更新價格屬性的任何想法?

+0

也許這個視頻將提供一些線索,以你的問題http://railscasts.com/episodes/396-importing-csv-and-excel?autoplay=true –

回答

0

嘗試這樣做,它似乎不像csv返回符號化的散列鍵 和切片似乎並沒有在那裏工作。這個怎麼樣你 CSV.foreach循環內:

inventory_item.update_attributes(:price => row.to_hash["price"]) 
+0

對不起,並不意味着暗示在我的控制檯示例中。這是一個小數。修正了這個例子。 – settheline

+0

你是說如果':price'是一個小數,我應該調用'to_f'? – settheline

+0

我是,但試過了,它不需要它。更新我的答案以表明csv不返回符號散列鍵。 – mobileAgent