2

我有许多表,我每周将所有字段设置为零,除了少数选择的字段(包括外键和一些时间值)。目前,我正在使用 update_all(field: value, ...) 命令,它工作得很好。唯一的问题是每一个我要清除的字段都要列出来,而且我经常在换表时忘记在此处添加字段,从而导致错误。

有没有办法让rails清除表中除了指定的几个字段之外的所有字段?

谢谢!

4

1 回答 1

3

在 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
于 2017-06-18T22:24:42.863 回答