Navigation Menu

Skip to content

Commit

Permalink
Try reloading model on class mismatch [#229 state:resolved]
Browse files Browse the repository at this point in the history
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information
lawrencepit authored and lifo committed Oct 4, 2008
1 parent b437a7d commit 7659fb6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
Expand Up @@ -240,7 +240,7 @@ def foreign_key_present
# 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)
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
end
Expand Down
20 changes: 20 additions & 0 deletions activerecord/test/cases/reload_models_test.rb
@@ -0,0 +1,20 @@
require "cases/helper"
require 'models/owner'
require 'models/pet'

class ReloadModelsTest < ActiveRecord::TestCase
def test_has_one_with_reload
pet = Pet.find_by_name('parrot')
pet.owner = Owner.find_by_name('ashley')

# Reload the class Owner, simulating auto-reloading of model classes in a
# development environment. Note that meanwhile the class Pet is not
# reloaded, simulating a class that is present in a plugin.
Object.class_eval { remove_const :Owner }
Kernel.load(File.expand_path(File.join(File.dirname(__FILE__), "../models/owner.rb")))

pet = Pet.find_by_name('parrot')
pet.owner = Owner.find_by_name('ashley')
assert_equal pet.owner, Owner.find_by_name('ashley')
end
end

0 comments on commit 7659fb6

Please sign in to comment.