1

いくつかの選択項目(外部キーと時間値を含む)を除いて、すべてのフィールドを0に設定するテーブルがいくつかあります。毎週現時点では、update_all(field:value、...)コマンドを使用していますが、これは正常に動作します。唯一の問題は、クリアしたい各フィールドを列挙しなければならないことです。テーブルを変更するときにフィールドを追加することを忘れてしまい、エラーにつながります。Rails Postgres:テーブル内のすべてのフィールドを0に設定します。

指定された数を除いて、テーブル内のすべてのフィールドをレールでクリアする方法はありますか?

ありがとうございます!

答えて

2

すべてのモデルでは、列のリストを返すメソッド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

パーフェクト。ありがとう! –

関連する問題