From 21a386bb0726cce4f4a5d64d55fbb55d8a2b9837 Mon Sep 17 00:00:00 2001 From: Sean Griffin Date: Thu, 29 Oct 2015 16:46:57 -0600 Subject: Ensure `has_and_belongs_to_many` works with `belongs_to_required_by_default` Before this commit, if `ActiveRecord::Base.belongs_to_required_by_default` is set to `true`, then creating a record through `has_and_belongs_to_many` fails with the cryptic error message `Left side must exist`. This is because `inverse_of` isn't working properly in this case, presumably since we're doing trickery with anonymous classes in the middle. Rather than following this rabbit hole to try and get `inverse_of` to work in a case that we know is not publicly supported, we can just turn off this validation to match the behavior of 4.2 and earlier. --- .../cases/associations/has_and_belongs_to_many_associations_test.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb') diff --git a/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb b/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb index e9f679e6de..ccb062f991 100644 --- a/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb @@ -976,4 +976,10 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase assert preloaded_first_project.salaried_developers.loaded?, true assert_equal first_project.salaried_developers.size, preloaded_first_project.salaried_developers.size end + + def test_has_and_belongs_to_many_is_useable_with_belongs_to_required_by_default + assert_difference "Project.first.developers_required_by_default.size", 1 do + Project.first.developers_required_by_default.create!(name: "Sean", salary: 50000) + end + end end -- cgit v1.2.3