Skip to content

Commit

Permalink
Merge pull request #11897 from wangjohn/fixing_multiple_word_inverse_…
Browse files Browse the repository at this point in the history
…detection

Fixing multi-word automatic inverse detection.
  • Loading branch information
José Valim committed Aug 15, 2013
2 parents e6b9f13 + c9e2fa2 commit e90f0e0
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 2 deletions.
4 changes: 2 additions & 2 deletions activerecord/lib/active_record/reflection.rb
Expand Up @@ -394,7 +394,7 @@ def inverse_name
# returns either nil or the inverse association name that it finds.
def automatic_inverse_of
if can_find_inverse_of_automatically?(self)
inverse_name = active_record.name.downcase.to_sym
inverse_name = ActiveSupport::Inflector.underscore(active_record.name).to_sym

begin
reflection = klass.reflect_on_association(inverse_name)
Expand All @@ -413,7 +413,7 @@ def automatic_inverse_of
end

# Checks if the inverse reflection that is returned from the
# +set_automatic_inverse_of+ method is a valid reflection. We must
# +automatic_inverse_of+ method is a valid reflection. We must
# make sure that the reflection's active_record name matches up
# with the current reflection's klass name.
#
Expand Down
14 changes: 14 additions & 0 deletions activerecord/test/cases/associations/inverse_associations_test.rb
Expand Up @@ -9,10 +9,24 @@
require 'models/comment'
require 'models/car'
require 'models/bulb'
require 'models/mixed_case_monkey'

class AutomaticInverseFindingTests < ActiveRecord::TestCase
fixtures :ratings, :comments, :cars

def test_has_one_and_belongs_to_should_find_inverse_automatically_on_multiple_word_name
monkey_reflection = MixedCaseMonkey.reflect_on_association(:man)
man_reflection = Man.reflect_on_association(:mixed_case_monkey)

assert_respond_to monkey_reflection, :has_inverse?
assert monkey_reflection.has_inverse?, "The monkey reflection should have an inverse"
assert_equal man_reflection, monkey_reflection.inverse_of, "The monkey reflection's inverse should be the man reflection"

assert_respond_to man_reflection, :has_inverse?
assert man_reflection.has_inverse?, "The man reflection should have an inverse"
assert_equal monkey_reflection, man_reflection.inverse_of, "The man reflection's inverse should be the monkey reflection"
end

def test_has_one_and_belongs_to_should_find_inverse_automatically
car_reflection = Car.reflect_on_association(:bulb)
bulb_reflection = Bulb.reflect_on_association(:car)
Expand Down
1 change: 1 addition & 0 deletions activerecord/test/models/man.rb
Expand Up @@ -6,4 +6,5 @@ class Man < ActiveRecord::Base
# These are "broken" inverse_of associations for the purposes of testing
has_one :dirty_face, :class_name => 'Face', :inverse_of => :dirty_man
has_many :secret_interests, :class_name => 'Interest', :inverse_of => :secret_man
has_one :mixed_case_monkey
end
2 changes: 2 additions & 0 deletions activerecord/test/models/mixed_case_monkey.rb
@@ -1,3 +1,5 @@
class MixedCaseMonkey < ActiveRecord::Base
self.primary_key = 'monkeyID'

belongs_to :man
end

0 comments on commit e90f0e0

Please sign in to comment.