Allow constructors for has_one :through

This commit is contained in:
Santiago Perez Perret 2020-08-07 16:36:22 -03:00
parent 1c634c3fda
commit ac61973247
No known key found for this signature in database
GPG Key ID: 0C28FC12C77DD20A
3 changed files with 24 additions and 5 deletions

View File

@ -1,3 +1,8 @@
* Allow constructors (`build_association` and `create_association`) on
`has_one :through` associations.
*Santiago Perez Perret*
## Rails 6.1.0.rc1 (November 02, 2020) ##
* Add `connected_to_many` API.

View File

@ -690,11 +690,6 @@ module ActiveRecord
Associations::HasOneAssociation
end
end
private
def calculate_constructable(macro, options)
!options[:through]
end
end
class BelongsToReflection < AssociationReflection # :nodoc:

View File

@ -49,6 +49,13 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
assert_not_nil new_member.club
end
def test_association_create_constructor_creates_through_record
new_member = Member.create(name: "Chris")
new_member.create_club
assert_not_nil new_member.current_membership
assert_not_nil new_member.club
end
def test_creating_association_builds_through_record
new_member = Member.create(name: "Chris")
new_club = new_member.association(:club).build
@ -61,6 +68,18 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
assert_predicate new_member.current_membership, :persisted?
end
def test_association_build_constructor_builds_through_record
new_member = Member.create(name: "Chris")
new_club = new_member.build_club
assert new_member.current_membership
assert_equal new_club, new_member.club
assert_predicate new_club, :new_record?
assert_predicate new_member.current_membership, :new_record?
assert new_member.save
assert_predicate new_club, :persisted?
assert_predicate new_member.current_membership, :persisted?
end
def test_creating_association_builds_through_record_for_new
new_member = Member.new(name: "Jane")
new_member.club = clubs(:moustache_club)