耙子任务替换而不是创建新的



我有这个耙子任务

Event.find_or_create_by(
  time: row[9],
  date: row[10],
  event_type: word1,
  eventimage: row[4],
  eventname: eventname,
  eventvenuename: location,
  event: eventname,
  eventlink1: eventlink1,
  eventlink2: eventlink2
)

现在发生的事情是eventlink1可能是第一次输入,第一次eventlink2将被null。如果我再次运行它并且eventlink2现在有要填充的数据,它会创建一个新行,而不是更新现有行。

如何使此更新成为现有行而不是创建新行?

如果find_or_create_by找不到与您给出的字段匹配的行,则会创建一个新行,并且当您给出nil值时,它会将其转换为 SQL WHERE eventlink2 IS NULL ,因此第二次它不会找到完全匹配的行。

应将该命令分解为单独的find_by查询和create命令。

如果要匹配数据库中具有NULL值的字段,则可以在查询中包含nil

event = Event.find_by(
   ...
   eventlink2: [eventlink2, nil]
)
if event
  event.update(...)
else
  Event.create(...)
end

最新更新