aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2012-07-02 20:27:10 -0700
committerRafael Mendonça França <rafaelmfranca@gmail.com>2012-07-02 20:27:10 -0700
commit55456ad34ac2be56392bce074577ebc0aeb509b2 (patch)
treed6f9857f7b6f2e5f288a1fe89a7fe9dd9b9e9d7f
parent215d41d802637520129cb7551b35faca72873143 (diff)
parent9196b93111b5f89f030b089d32d7a3a9d49b0df9 (diff)
downloadrails-55456ad34ac2be56392bce074577ebc0aeb509b2.tar.gz
rails-55456ad34ac2be56392bce074577ebc0aeb509b2.tar.bz2
rails-55456ad34ac2be56392bce074577ebc0aeb509b2.zip
Merge pull request #6934 from kennyj/fix_store
Don't mark the store as changed if an attribute isn't changed.
-rw-r--r--activerecord/lib/active_record/store.rb7
-rw-r--r--activerecord/test/cases/store_test.rb5
2 files changed, 10 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/store.rb b/activerecord/lib/active_record/store.rb
index d13491502e..2af5b02fb7 100644
--- a/activerecord/lib/active_record/store.rb
+++ b/activerecord/lib/active_record/store.rb
@@ -58,8 +58,11 @@ module ActiveRecord
keys.each do |key|
define_method("#{key}=") do |value|
initialize_store_attribute(store_attribute)
- send(store_attribute)[key] = value
- send :"#{store_attribute}_will_change!"
+ attribute = send(store_attribute)
+ if value != attribute[key]
+ attribute[key] = value
+ send :"#{store_attribute}_will_change!"
+ end
end
define_method(key) do
diff --git a/activerecord/test/cases/store_test.rb b/activerecord/test/cases/store_test.rb
index e401dd4b12..7f2b8945f9 100644
--- a/activerecord/test/cases/store_test.rb
+++ b/activerecord/test/cases/store_test.rb
@@ -34,6 +34,11 @@ class StoreTest < ActiveRecord::TestCase
assert @john.settings_changed?
end
+ test "updating the store won't mark it as changed if an attribute isn't changed" do
+ @john.color = @john.color
+ assert !@john.settings_changed?
+ end
+
test "object initialization with not nullable column" do
assert_equal true, @john.remember_login
end