2013-02-15 38 views
1

我寫了一個遷移是執行以下操作:我可以將這兩條#update_all行組合成一行嗎?

Event.update_all 'tom_cancelled = false', 'tom_cancelled IS NULL' 
Event.update_all 'jerry_cancelled = false', 'jerry_cancelled IS NULL' 

可以(如果我可以,怎麼辦)我結合這些一起幹起來?我會用塊嗎?

+4

你不能。它們是具有不同條件的不同陳述,旨在適用於不同的記錄。 – meagar 2013-02-15 19:39:28

+0

你可以將它們打包成'CASE'語句,但是你已經擁有的可能是Rails中合適的方式。 'UPDATE tbl SET tom_cancelled = CASE WHEN tom_cancelled IS NULL then FALSE ELSE tom_cancelled END,jerry_cancelled = CASE when jerry_cancelled is NULL那麼假否則jerry_cancelled END;'' – 2013-02-15 20:06:16

回答

2

你不能這樣做,除非你想在ActiveRecord中使用一個循環,但它沒有任何意義,因爲對於SELECT,結果集中的每個記錄都會有一個UPDATE查詢。

以目前的方式,只運行兩個查詢,無論結果集中有多少條記錄。

絕對不需要抽象出更多的當前代碼。特別是考慮到它在遷移中運行。

相關問題