使用find_or_create_by更新表

时间:2014-06-28 20:05:31

标签: sql ruby-on-rails ruby postgresql csv

在我更改url列后,我有一个表,我正在尝试更新。目前,当我运行rake db:seed时,数据被播种到数据库中,但是如果我对csv进行了更改,在这种情况下更改为url,我想更新表以反映该更改。目前,该表不会更新该值。

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中的任何更改或新条目?

1 个答案:

答案 0 :(得分: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