2016-02-28 59 views
0

我有這個rake任務rake任務更換,而不是創造新的

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可以被輸入在第一時間和第一時間eventlink2null。如果我再次運行它並且eventlink2現在有數據要填充,它將創建一個新行,而不是更新現有數據。

我如何使這個更新現有的行,而不是創建一個新的?

回答

0

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 
+0

這難道不是還在做一樣的?我不會看像findandupdate或創建? –

+0

編號'find_or_create_by'只是它們的參數相同的'find_by'和'create'的替代品。你需要用不同的參數調用'find_by'。 – Leventix

+0

哦,我忘了'更新'。你需要把它放到'if'的'else'分支中。 – Leventix