【问题标题】:Rails Postgres: set all fields in a table to zero, except forRails Postgres:将表中的所有字段设置为零,除了
【发布时间】:2017-06-18 21:58:55
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: sql ruby-on-rails postgresql rails-activerecord update-all


    【解决方案1】:

    在 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
    

    【讨论】:

    • 完美。谢谢!
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2012-09-21
    • 2023-02-10
    相关资源
    最近更新 更多