mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Allow constructors for has_one :through
This commit is contained in:
parent
1c634c3fda
commit
ac61973247
3 changed files with 24 additions and 5 deletions
|
@ -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.
|
||||
|
|
|
@ -690,11 +690,6 @@ module ActiveRecord
|
|||
Associations::HasOneAssociation
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def calculate_constructable(macro, options)
|
||||
!options[:through]
|
||||
end
|
||||
end
|
||||
|
||||
class BelongsToReflection < AssociationReflection # :nodoc:
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue