mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #15309 from iantropov/issue_12698_build_through
Add setting of FK for throgh associations while building Conflicts: activerecord/CHANGELOG.md activerecord/test/cases/associations/has_many_through_associations_test.rb
This commit is contained in:
commit
ecdae459d2
4 changed files with 29 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
* Fixed setting of foreign_key for through associations while building of new record.
|
||||
|
||||
Fixes #12698.
|
||||
|
||||
*Ivan Antropov*
|
||||
|
||||
* Improve a dump of the primary key support. If it is not a default primary key,
|
||||
correctly dump the type and options.
|
||||
|
||||
|
|
|
@ -91,6 +91,17 @@ module ActiveRecord
|
|||
raise HasManyThroughNestedAssociationsAreReadonly.new(owner, reflection)
|
||||
end
|
||||
end
|
||||
|
||||
def build_record(attributes)
|
||||
inverse = source_reflection.inverse_of
|
||||
target = through_association.target
|
||||
|
||||
if inverse && target && !target.is_a?(Array)
|
||||
attributes[inverse.foreign_key] = target.id
|
||||
end
|
||||
|
||||
super(attributes)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -25,12 +25,13 @@ require 'models/categorization'
|
|||
require 'models/member'
|
||||
require 'models/membership'
|
||||
require 'models/club'
|
||||
require 'models/organization'
|
||||
|
||||
class HasManyThroughAssociationsTest < ActiveRecord::TestCase
|
||||
fixtures :posts, :readers, :people, :comments, :authors, :categories, :taggings, :tags,
|
||||
:owners, :pets, :toys, :jobs, :references, :companies, :members, :author_addresses,
|
||||
:subscribers, :books, :subscriptions, :developers, :categorizations, :essays,
|
||||
:categories_posts, :clubs, :memberships
|
||||
:categories_posts, :clubs, :memberships, :organizations
|
||||
|
||||
# Dummies to force column loads so query counts are clean.
|
||||
def setup
|
||||
|
@ -1151,4 +1152,12 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
|
|||
club.members << member
|
||||
assert_equal 1, SuperMembership.where(member_id: member.id, club_id: club.id).count
|
||||
end
|
||||
|
||||
def test_build_for_has_many_through_association
|
||||
organization = organizations(:nsa)
|
||||
author = organization.author
|
||||
post_direct = author.posts.build
|
||||
post_through = organization.posts.build
|
||||
assert_equal post_direct.author_id, post_through.author_id
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,5 +8,7 @@ class Organization < ActiveRecord::Base
|
|||
has_one :author, :primary_key => :name
|
||||
has_one :author_owned_essay_category, :through => :author, :source => :owned_essay_category
|
||||
|
||||
has_many :posts, :through => :author, :source => :posts
|
||||
|
||||
scope :clubs, -> { from('clubs') }
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue