diff options
author | Ujjwal Thaakar <ujjwalthaakar@gmail.com> | 2014-01-14 18:53:45 +0530 |
---|---|---|
committer | Ujjwal Thaakar <ujjwalthaakar@gmail.com> | 2014-01-14 18:53:45 +0530 |
commit | e8d1d84837a59ef7d73b29b16ee05cd610d30a90 (patch) | |
tree | cc13fee530ff0a6045b8a4acb58e9a96e4b818cc /activerecord/test | |
parent | b242b2dbe75f0b5e86e2ce9ef7c2c5ee96e17862 (diff) | |
download | rails-e8d1d84837a59ef7d73b29b16ee05cd610d30a90.tar.gz rails-e8d1d84837a59ef7d73b29b16ee05cd610d30a90.tar.bz2 rails-e8d1d84837a59ef7d73b29b16ee05cd610d30a90.zip |
Don't try to get the subclass if the inheritance column doesn't exist
The `subclass_from_attrs` method is called even if the column specified by
the `inheritance_column` setting doesn't exist. This prevents setting associations
via the attributes hash if the association name clashes with the value of the setting,
typically `:type`. This worked previously in Rails 3.2.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/inheritance_test.rb | 9 | ||||
-rw-r--r-- | activerecord/test/models/shop.rb | 5 | ||||
-rw-r--r-- | activerecord/test/schema/schema.rb | 5 |
3 files changed, 18 insertions, 1 deletions
diff --git a/activerecord/test/cases/inheritance_test.rb b/activerecord/test/cases/inheritance_test.rb index 7fd7d42354..d2b5a06b55 100644 --- a/activerecord/test/cases/inheritance_test.rb +++ b/activerecord/test/cases/inheritance_test.rb @@ -1,10 +1,11 @@ -require "cases/helper" +require 'cases/helper' require 'models/company' require 'models/person' require 'models/post' require 'models/project' require 'models/subscriber' require 'models/vegetables' +require 'models/shop' class InheritanceTest < ActiveRecord::TestCase fixtures :companies, :projects, :subscribers, :accounts, :vegetables @@ -367,4 +368,10 @@ class InheritanceComputeTypeTest < ActiveRecord::TestCase ensure ActiveRecord::Base.store_full_sti_class = true end + + def test_sti_type_from_attributes_disabled_in_non_sti_class + phone = Shop::Product::Type.new(name: 'Phone') + product = Shop::Product.new(:type => phone) + assert product.save + end end diff --git a/activerecord/test/models/shop.rb b/activerecord/test/models/shop.rb index 81414227ea..607a0a5b41 100644 --- a/activerecord/test/models/shop.rb +++ b/activerecord/test/models/shop.rb @@ -5,6 +5,11 @@ module Shop class Product < ActiveRecord::Base has_many :variants, :dependent => :delete_all + belongs_to :type + + class Type < ActiveRecord::Base + has_many :products + end end class Variant < ActiveRecord::Base diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index ddfc1ac0d6..9a7d918a25 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -557,9 +557,14 @@ ActiveRecord::Schema.define do create_table :products, force: true do |t| t.references :collection + t.references :type t.string :name end + create_table :product_types, force: true do |t| + t.string :name + end + create_table :projects, force: true do |t| t.string :name t.string :type |