Roo我有一個使用gem從電子表格中正常作業的匯入。
問題是每次我呼叫 rake 任務時,都會創建新記錄。
如果記錄存在,我想要update_attributes記錄。
有沒有辦法解決這個問題?我試過這個沒有運氣:
namespace :import do
desc "Import data from spreadsheet" # update this line
task data: :environment do
data = Roo::Spreadsheet.open('lib/t3.xlsx') # open spreadsheet
headers = data.row(1) # get header row
data.each_with_index do |row, idx|
next if idx == 0 # skip header
# create hash from headers and cells
product_data = Hash[[headers, row].transpose]
product = Product.new(product_data)
puts "Guardando Producto #{product.name}"
if product?
product.update_attributes
else
product.save!
end
rescue ActiveRecord::RecordInvalid => invalid
puts invalid.record.errors
end
end
end
uj5u.com熱心網友回復:
if product?永遠不會回傳假。您正在測驗變數是否包含虛假值 ( nil/ false) 或任何其他值。呼叫后product = Product.new,存盤的值product永遠不能是nilor false。
你想要的是首先find,如果沒有找到,,new然后update_attributes在結果物件上:
product = Product.find_by(product_data.name) || Product.new
product.update_attributes(product_data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489665.html
下一篇:如果有別名,如何銷毀依賴項?
