From 2a6039a81027a4f0f3f9fc4d95b6bba7323af28d Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Thu, 9 Aug 2012 12:44:59 +0100 Subject: Ported PR #4856 to 3-2-stable. --- activerecord/lib/active_record/store.rb | 2 ++ activerecord/test/cases/store_test.rb | 11 ++++++++++- activerecord/test/models/admin/user.rb | 1 + activerecord/test/schema/schema.rb | 3 ++- 4 files changed, 15 insertions(+), 2 deletions(-) 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..15be4f0954 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -37,7 +37,8 @@ ActiveRecord::Schema.define do create_table :admin_users, :force => true do |t| t.string :name - t.text :settings + t.text :settings, :null => true + t.text :preferences, :null => false, :default => "" t.references :account end -- cgit v1.2.3 From af6dfdb1f3e2cd3e8a5e00a11a2c7b28352cdf48 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Thu, 9 Aug 2012 15:04:27 +0100 Subject: Backport #7173. --- activerecord/test/schema/schema.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index 15be4f0954..2b7ea0ce34 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -37,8 +37,10 @@ ActiveRecord::Schema.define do create_table :admin_users, :force => true do |t| t.string :name - t.text :settings, :null => true - t.text :preferences, :null => false, :default => "" + 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 -- cgit v1.2.3 From 5c2fc69461a4d3e6deecb688cd80ea15da1928dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Thu, 9 Aug 2012 13:58:57 -0300 Subject: Add CHANGELOG entry --- activerecord/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) 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. -- cgit v1.2.3