1
0
Fork 0
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:
Rafael Mendonça França 2015-01-02 14:29:07 -03:00
commit ecdae459d2
4 changed files with 29 additions and 1 deletions

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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