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