diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-08-09 13:59:49 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2012-08-09 13:59:52 -0300 |
commit | 0f9a6a7c80a2beeaace875d8a9d89a164811d729 (patch) | |
tree | a0e8db64aec41791007eb777554824ba9e00489b | |
parent | 2e98e0f38607d34a6cca8f9f7c5a4f318d681408 (diff) | |
parent | 5c2fc69461a4d3e6deecb688cd80ea15da1928dc (diff) | |
download | rails-0f9a6a7c80a2beeaace875d8a9d89a164811d729.tar.gz rails-0f9a6a7c80a2beeaace875d8a9d89a164811d729.tar.bz2 rails-0f9a6a7c80a2beeaace875d8a9d89a164811d729.zip |
Merge pull request #7299 from iHiD/3-2-stable-store
Ported PR #4856 to 3-2-stable.
-rw-r--r-- | activerecord/CHANGELOG.md | 5 | ||||
-rw-r--r-- | activerecord/lib/active_record/store.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/store_test.rb | 11 | ||||
-rw-r--r-- | activerecord/test/models/admin/user.rb | 1 | ||||
-rw-r--r-- | activerecord/test/schema/schema.rb | 5 |
5 files changed, 22 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index e8192e008d..01f41184cd 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,10 @@ ## Rails 3.2.9 (unreleased) +* Allow store to work with an empty column. + Fix #4840. + + *Jeremy Walker* + * Remove prepared statement from system query in postgresql adapter. Fix #5872. diff --git a/activerecord/lib/active_record/store.rb b/activerecord/lib/active_record/store.rb index 8cc84f81d0..49d01de365 100644 --- a/activerecord/lib/active_record/store.rb +++ b/activerecord/lib/active_record/store.rb @@ -36,11 +36,13 @@ module ActiveRecord def store_accessor(store_attribute, *keys) Array(keys).flatten.each do |key| define_method("#{key}=") do |value| + send("#{store_attribute}=", {}) unless send(store_attribute).is_a?(Hash) send(store_attribute)[key] = value send("#{store_attribute}_will_change!") end define_method(key) do + send("#{store_attribute}=", {}) unless send(store_attribute).is_a?(Hash) send(store_attribute)[key] end end diff --git a/activerecord/test/cases/store_test.rb b/activerecord/test/cases/store_test.rb index 5a3f9a9711..277fc9d676 100644 --- a/activerecord/test/cases/store_test.rb +++ b/activerecord/test/cases/store_test.rb @@ -4,7 +4,7 @@ require 'models/admin/user' class StoreTest < ActiveRecord::TestCase setup do - @john = Admin::User.create(:name => 'John Doe', :color => 'black') + @john = Admin::User.create(:name => 'John Doe', :color => 'black', :remember_login => true) end test "reading store attributes through accessors" do @@ -31,4 +31,13 @@ class StoreTest < ActiveRecord::TestCase @john.color = 'red' assert @john.settings_changed? end + + test "object initialization with not nullable column" do + assert_equal true, @john.remember_login + end + + test "writing with not nullable column" do + @john.remember_login = false + assert_equal false, @john.remember_login + end end diff --git a/activerecord/test/models/admin/user.rb b/activerecord/test/models/admin/user.rb index c12c88e195..d0e628bd50 100644 --- a/activerecord/test/models/admin/user.rb +++ b/activerecord/test/models/admin/user.rb @@ -1,4 +1,5 @@ class Admin::User < ActiveRecord::Base belongs_to :account store :settings, :accessors => [ :color, :homepage ] + store :preferences, :accessors => [ :remember_login ] end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index d6eed1552f..2b7ea0ce34 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -37,7 +37,10 @@ ActiveRecord::Schema.define do create_table :admin_users, :force => true do |t| t.string :name - t.text :settings + t.string :settings, :null => true, :limit => 1024 + # MySQL does not allow default values for blobs. Fake it out with a + # big varchar below. + t.string :preferences, :null => true, :default => '', :limit => 1024 t.references :account end |