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)
如何檢查記錄是否會被創建或更新或什麼都不會發生?
添加 提出 「新的記錄:{?rule_book.new_record}#」 放「更改:#{rule_book.changed?}」 找到並更新新記錄工作正常,但更改始終爲假 – xinu
這是因爲'update_attributes'自動保存記錄。用'book.attributes = row'分配屬性,然後檢查'book.changed?',然後調用'save!'。 – Stefan
很好,謝謝 – xinu