Railsコンソールを使用してモデルレコードを作成し、新しい変数を使用して取得し、いくつかのフィールドを更新します。
var = MyModel.new
var.name = "my name"
var.save
var2 = MyModel.last
var2.name = "your name"
var2.save
これで、古い変数に戻ると、フィールドがその値に上書きされることはなく、var.save単に戻ります。truename"my name"
なんで?
Railsコンソールを使用してモデルレコードを作成し、新しい変数を使用して取得し、いくつかのフィールドを更新します。
var = MyModel.new
var.name = "my name"
var.save
var2 = MyModel.last
var2.name = "your name"
var2.save
これで、古い変数に戻ると、フィールドがその値に上書きされることはなく、var.save単に戻ります。truename"my name"
なんで?
Railsモデルはデフォルトで「ダーティ」です。つまり、属性設定関数はattribute=()、属性を変更済みとしてマークし、次回の保存時にこの属性を更新するようにRailsに指示します。この情報は、データベースではなくモデルに保存されます。で、 Railsvar.saveは変更されたことがわかっている属性のみを更新します。Railsは、何も変更されていないと判断した場合、データベースの不一致をチェックしません(これは、実稼働環境では非常に遅くなります)。
var.reloadデータベースから対応するオブジェクトに属性を再ロードするために使用できます。
編集:上記のコメントを明確にするために、テストコードでは使用しMyModel.lastないでください。MyModel.firstデータベースに複数の行がある場合、MyModel.firstは最後に保存されたオブジェクトを参照しないためvar2、var完全に異なるオブジェクトを参照します。