まずあなたが列を追加するには、移行が必要ですが、デフォルトを設定していない(あなたは、レコードのトンを持っている場合、デフォルトの設定は、長い時間がかかることが)
ADD_COLUMN:some_attribute、:文字列
列がある場合は、それをバックフィルする必要があります。
find_each
を使用してください。 1,000,000人のユーザーは、何をしていても処理に時間がかかるでしょう。 find_each
を使用すると、一度に1,000個しかインスタンス化されません。
User.find_each do |user|
num = user.height * user.width # or whatever you need to figure out here
user.update_attributes(some_attribute: num)
end
あなたはfind_each
オフを蹴るエンドポイントを設定することができ、本当に、あなたはコンソール経由でそれを実行している最高のオフです。私はscreen
を使用します。これは、長時間実行されるプロセスになる可能性があるためです。
マイグレーションファイルにそのファイルを入れることはできますが、マイグレーション時にデータを操作するのがベストプラクティスであるかどうかについてはさまざまな意見があります。あなたがupdate_all使用することができます
マイグレーションされたデータの計算だけでデータベースの実際の列を使用したいのですか、またはモデルの読み取り専用属性を必要としますか? –
[Railsでバッチでアップデートを実行するにはどうすればいいですか?](https://stackoverflow.com/questions/23252811/how-can-i-run-updates-in-batches-in-rails) – Ilya
@Ilya間違いなく、バッチで更新を実行する方法について説明しています。他の列の値に基づいて列を作成する方法を知りたかったのです。 –