2017-06-18 48 views
1

我有一些表中的所有字段都設置爲零,除了幾個選擇的字段(包括外鍵和一些時間值),在一個每週。目前,我正在使用update_all(field:value,...)命令,它工作得很好。唯一的問題是我必須列出每個我想清除的字段,並且當我更改表格時,我經常忘記添加字段,這會導致錯誤。Rails Postgres:將表中的所有字段設置爲零,除了

有沒有辦法讓鋼軌清除表中的所有領域,除了指定的幾個?

謝謝!

回答

2

在Rails中,每個模型都有方法columns,它返回列的列表。你可以爲每一個模型做這樣的事情:

columns = Entry.columns.map(&:name) 
# => ["id", "dish_id", "name", "value"] 
columns_to_update = columns - ["id"] 
# => ["dish_id", "name", "value"] 
columns_with_zero = columns_to_update.map { |c| [c, 0] }.to_h 
# => {"dish_id"=>0, "name"=>0, "value"=>0} 
Entry.update_all columns_with_zero 
# UPDATE "entries" SET "dish_id" = 0, "name" = '0', "value" = 0 
+0

完美。謝謝! –

相關問題