diff options
author | Aaron Pfeifer <aaron.pfeifer@gmail.com> | 2013-03-27 22:27:47 -0400 |
---|---|---|
committer | Aaron Pfeifer <aaron.pfeifer@gmail.com> | 2013-03-27 22:27:47 -0400 |
commit | 482f8c15b1d699c95bfbc3d836f674a09c0d9031 (patch) | |
tree | 6d51a1488caf72c2328ac8dc7fd39fee64606580 /activerecord | |
parent | 57fbcc524780ce386241c8def372984583e585d6 (diff) | |
download | rails-482f8c15b1d699c95bfbc3d836f674a09c0d9031.tar.gz rails-482f8c15b1d699c95bfbc3d836f674a09c0d9031.tar.bz2 rails-482f8c15b1d699c95bfbc3d836f674a09c0d9031.zip |
Fix updates not working within after_create hooks
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/persistence.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/persistence_test.rb | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/persistence.rb b/activerecord/lib/active_record/persistence.rb index f881778591..42cece3ad0 100644 --- a/activerecord/lib/active_record/persistence.rb +++ b/activerecord/lib/active_record/persistence.rb @@ -443,7 +443,7 @@ module ActiveRecord real_column = db_columns_with_values[i].first bind_attrs[column] = klass.connection.substitute_at(real_column, i) end - stmt = klass.unscoped.where(klass.arel_table[klass.primary_key].eq(id_was)).arel.compile_update(bind_attrs) + stmt = klass.unscoped.where(klass.arel_table[klass.primary_key].eq(id_was || id)).arel.compile_update(bind_attrs) klass.connection.update stmt, 'SQL', db_columns_with_values end end diff --git a/activerecord/test/cases/persistence_test.rb b/activerecord/test/cases/persistence_test.rb index a29189df05..ff06bd4f8b 100644 --- a/activerecord/test/cases/persistence_test.rb +++ b/activerecord/test/cases/persistence_test.rb @@ -296,6 +296,22 @@ class PersistencesTest < ActiveRecord::TestCase assert_equal "Reply", topic.type end + def test_update_after_create + klass = Class.new(Topic) do + def self.name; 'Topic'; end + after_create do + update_attribute("author_name", "David") + end + end + topic = klass.new + topic.title = "Another New Topic" + topic.save + + topicReloaded = Topic.find(topic.id) + assert_equal("Another New Topic", topicReloaded.title) + assert_equal("David", topicReloaded.author_name) + end + def test_delete topic = Topic.find(1) assert_equal topic, topic.delete, 'topic.delete did not return self' |