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) ##
|
## Rails 6.1.0.rc1 (November 02, 2020) ##
|
||||||
|
|
||||||
* Add `connected_to_many` API.
|
* Add `connected_to_many` API.
|
||||||
|
|
|
@ -690,11 +690,6 @@ module ActiveRecord
|
||||||
Associations::HasOneAssociation
|
Associations::HasOneAssociation
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
def calculate_constructable(macro, options)
|
|
||||||
!options[:through]
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class BelongsToReflection < AssociationReflection # :nodoc:
|
class BelongsToReflection < AssociationReflection # :nodoc:
|
||||||
|
|
|
@ -49,6 +49,13 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
|
||||||
assert_not_nil new_member.club
|
assert_not_nil new_member.club
|
||||||
end
|
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
|
def test_creating_association_builds_through_record
|
||||||
new_member = Member.create(name: "Chris")
|
new_member = Member.create(name: "Chris")
|
||||||
new_club = new_member.association(:club).build
|
new_club = new_member.association(:club).build
|
||||||
|
@ -61,6 +68,18 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase
|
||||||
assert_predicate new_member.current_membership, :persisted?
|
assert_predicate new_member.current_membership, :persisted?
|
||||||
end
|
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
|
def test_creating_association_builds_through_record_for_new
|
||||||
new_member = Member.new(name: "Jane")
|
new_member = Member.new(name: "Jane")
|
||||||
new_member.club = clubs(:moustache_club)
|
new_member.club = clubs(:moustache_club)
|
||||||
|
|
Loading…
Reference in a new issue