2014-06-28 33 views
0

我有一個表,我試圖更新後,我已經對url列進行了更改。目前,我在運行rake db:seed時將數據嵌入到數據庫中,但如果我對csv進行了更改(在本例中爲url),我想更新表以反映該更改。目前,該表格不會更新該值。使用find_or_create_by更新表

require 'csv' 

datafile = Rails.root + 'db/data.csv' 

CSV.foreach(datafile, headers: true) do |row| 

    Data.find_or_create_by({address: row[0]}) do |hr| 
    hr.address = row[0] 
    hr.city = row[1] 
    hr.state = row[2] 
    hr.zip = row[3] 
    hr.name = row[4] 
    hr.url = row[5] 
    end 

end 

CSV.foreach(datafile, headers: true) do |row| 

    Data.find_or_create_by({url: row[5]}) do |hr| 
    hr.url = row[5] 
    end 

end 

我試着只對url(row [5])做find_or_create_by,但是這些改變沒有被反映出來。我怎樣才能讓這個種子文件更新postgreSQL數據庫中CSV的任何更改或新條目?

+0

'find_or_create'不會更新記錄,如果它已經存在。如果要更新現有記錄,則不希望顯式調用'save'或'update_attributes'方法。 – Baldrick

回答

1
CSV.foreach(datafile, headers: true) do |row| 
    Data.find_or_create_by({url: row[5]}) do |hr| 
    hr.url = row[5] 

    # call the save method, to saved the change 
    hr.save 
    end 
end