我有这个耙子任务
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