1
我有一些表中的所有字段都设置为零,除了几个选择的字段(包括外键和一些时间值),在一个每周。目前,我正在使用update_all(field:value,...)命令,它工作得很好。唯一的问题是我必须列出每个我想清除的字段,并且当我更改表格时,我经常忘记添加字段,这会导致错误。Rails Postgres:将表中的所有字段设置为零,除了
有没有办法让钢轨清除表中的所有领域,除了指定的几个?
谢谢!
我有一些表中的所有字段都设置为零,除了几个选择的字段(包括外键和一些时间值),在一个每周。目前,我正在使用update_all(field:value,...)命令,它工作得很好。唯一的问题是我必须列出每个我想清除的字段,并且当我更改表格时,我经常忘记添加字段,这会导致错误。Rails Postgres:将表中的所有字段设置为零,除了
有没有办法让钢轨清除表中的所有领域,除了指定的几个?
谢谢!
在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
完美。谢谢! –