[解決済み] Railsマイグレーションで、あるカラムを別のカラムの値に更新する
2023-07-05 03:46:12
質問
Railsアプリで数十万件のレコードがあるテーブルがあるのですが、そのテーブルには
created_at
のタイムスタンプしかありません。これらのレコードを編集する機能を追加しているので、そのために
updated_at
のタイムスタンプをテーブルに追加したいと思います。このカラムを追加するためのマイグレーションでは、すべての行を更新して、新しい
updated_at
が古い
created_at
にマッチします。Railsで新しく作成された行は、これがデフォルトだからです。を行うことができました。
find(:all)
を実行してレコードを繰り返し処理することもできますが、テーブルのサイズが大きいので何時間もかかってしまいます。私が本当にやりたいことは
UPDATE table_name SET updated_at = created_at;
Railsのマイグレーションで、生のSQLを実行するのではなく、ActiveRecordを使用してそれを行うより良い方法はありますか?
どのように解決するのですか?
マイグレーションを作成する
rails g migration set_updated_at_values
で、その中に次のようなことを書きます。
class SetUpdatedAt < ActiveRecord::Migration
def self.up
Yourmodel.update_all("updated_at=created_at")
end
def self.down
end
end
この方法では、次の2つのことが実現できます。
- これは反復可能なプロセスであり、可能なデプロイメント (必要な場所) ごとに実行されます。
- これは効率的です。これ以上ruby的なソリューション(効率的である)は思いつきません。
注:activerecordを使ってクエリを書くのが大変な場合、マイグレーション内でraw sqlを実行することもできます。次のように書けばよいのです。
Yourmodel.connection.execute("update your_models set ... <complicated query> ...")
関連
-
[解決済み] Railsサーバーがポートはすでに使用されていると言う、そのプロセスを殺すにはどうすればよいですか?
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rails DBの移行 - テーブルを削除するには?
-
[解決済み] Ruby on Railsのマイグレーションで、カラムをユニークにしてインデックスを作成するにはどうすればよいですか?
-
[解決済み] Ruby on RailsのActiveRecordのマイグレーションで、長すぎるインデックス名を処理するには?
-
[解決済み】RailsでActiveRecordモデルとそのテーブルの名前を変更するマイグレーションはどのように記述するのですか?
-
[解決済み】Rails 4で参照列のマイグレーションを追加する
-
[解決済み] Rails は、データベースに対して実行されたマイグレーションをどのように追跡しているのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】bundle installが "Could not locate Gemfile "を返す。
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] Railsです。NameError: 初期化されていない定数
-
[解決済み] heroku open - no app specified
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] AWS S3です。アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレスされている必要があります。
-
[解決済み] Rubyのクラスで未初期化の定数エラーが発生する
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] Rspec が私のモデルクラスを認識しない。初期化されていない定数エラー
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]