aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2015-06-23 08:50:02 +0200
committerYves Senn <yves.senn@gmail.com>2015-06-23 09:09:02 +0200
commit8e27fd95945ac9f81a5ad1b30e5d6c5f32878afa (patch)
treebce55373f0718a3d7d6e0fac6ea6efeca56b150e /activerecord/lib
parentf7ac57e8d88de18ab33beaf8a8bec1773f3e8b6e (diff)
parent828d0d7a7751a0c6a9faf0c96b89b0ea06a76094 (diff)
downloadrails-8e27fd95945ac9f81a5ad1b30e5d6c5f32878afa.tar.gz
rails-8e27fd95945ac9f81a5ad1b30e5d6c5f32878afa.tar.bz2
rails-8e27fd95945ac9f81a5ad1b30e5d6c5f32878afa.zip
Merge pull request #20545 from dcrec1/20541
thrown ActiveRecord::AssociationTypeMismatch when assigning a wrong value for a namespaced association
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/associations/association.rb9
1 files changed, 6 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/associations/association.rb b/activerecord/lib/active_record/associations/association.rb
index 930f678ae8..7c729676a7 100644
--- a/activerecord/lib/active_record/associations/association.rb
+++ b/activerecord/lib/active_record/associations/association.rb
@@ -211,9 +211,12 @@ module ActiveRecord
# the kind of the class of the associated objects. Meant to be used as
# a sanity check when you are about to assign an associated record.
def raise_on_type_mismatch!(record)
- unless record.is_a?(reflection.klass) || record.is_a?(reflection.class_name.constantize)
- message = "#{reflection.class_name}(##{reflection.klass.object_id}) expected, got #{record.class}(##{record.class.object_id})"
- raise ActiveRecord::AssociationTypeMismatch, message
+ unless record.is_a?(reflection.klass)
+ fresh_class = reflection.class_name.safe_constantize
+ unless fresh_class && record.is_a?(fresh_class)
+ message = "#{reflection.class_name}(##{reflection.klass.object_id}) expected, got #{record.class}(##{record.class.object_id})"
+ raise ActiveRecord::AssociationTypeMismatch, message
+ end
end
end