diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 462c7ae115c462e8cbc906497a6fbe5a9261a61d..5646c1a0f2f77c44acf49c7b570136a2d8fca86f 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* After a successful `reload`, `new_record?` is always false. + + Fixes #12101. + + *Matthew Draper* + * PostgreSQL renaming table doesn't attempt to rename non existent sequences. *Abdelkader Boudih* diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb index ee634d7bb343cc69d2850a84ff829a1d41dad530..96e44c2f599af3db0435fe54c3930d997f1fd3d5 100644 --- a/activerecord/lib/active_record/persistence.rb +++ b/activerecord/lib/active_record/persistence.rb @@ -396,6 +396,7 @@ def reload(options = nil) end @attributes = fresh_object.instance_variable_get('@attributes') + @new_record = false self end diff --git a/activerecord/test/cases/persistence_test.rb b/activerecord/test/cases/persistence_test.rb index 1192ecd6b438cb966613855dcb2607df99855fc1..9b762fc0d5504da9254aac366fd8490742d3e508 100644 --- a/activerecord/test/cases/persistence_test.rb +++ b/activerecord/test/cases/persistence_test.rb @@ -865,4 +865,16 @@ def test_reload_removes_custom_selects assert_equal 1, post[:wibble] assert_nil post.reload[:wibble] end + + def test_find_via_reload + post = Post.new + + assert post.new_record? + + post.id = 1 + post.reload + + assert_equal "Welcome to the weblog", post.title + assert_not post.new_record? + end end