2012-06-01 79 views
1

我有從CSV更新數據庫中的數據的方法。Rails:如何檢查find_or_initialize是否正在更新/創建/跳過?

csv_text = File.read("#{Rails.root}/db/seed/books.csv") 
csv = CSV.parse(csv_text, :headers => :first_row) 
csv.each { |row| 
row = row.to_hash.with_indifferent_access.to_hash.symbolize_keys 
row.delete_if { |key, value| value.nil? } 
book = Book.find_or_initialize_by_name(row[:name]) 
book.update_attributes!(row) 

如何檢查記錄是否會被創建或更新或什麼都不會發生?

回答

4

要檢查是否book改爲:

book.changed? 

要檢查是否book是一個新的記錄:

book.new_record? 
+0

添加 提出 「新的記錄:{?rule_book.new_record}#」 放「更改:#{rule_book.changed?}」 找到並更新新記錄工作正常,但更改始終爲假 – xinu

+1

這是因爲'update_attributes'自動保存記錄。用'book.attributes = row'分配屬性,然後檢查'book.changed?',然後調用'save!'。 – Stefan

+0

很好,謝謝 – xinu

相關問題