【问题标题】:Using find_or_create_by to update table使用 find_or_create_by 更新表
【发布时间】:2014-08-19 15:58:47
【问题描述】:

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

【问题讨论】:

  • find_or_create 不会更新已存在的记录。如果要更新现有记录,您讨厌显式调用 saveupdate_attributes 方法。

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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多