2017-06-18 98 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

完美。谢谢! –

相关问题