1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Has many through - It is not necessary to manually merge in the conditions hash for the through record, because the creation is done directly on the through association, which will already handle setting the conditions.

This commit is contained in:
Jon Leighton 2011-01-26 23:00:13 +00:00
parent c5e912a8b3
commit 3fa61ccb9e
4 changed files with 16 additions and 6 deletions

View file

@ -88,10 +88,6 @@ module ActiveRecord
join_attributes.merge!(@reflection.source_reflection.foreign_type => associate.class.base_class.name)
end
if @reflection.through_reflection.options[:conditions].is_a?(Hash)
join_attributes.merge!(@reflection.through_reflection.options[:conditions])
end
join_attributes
end

View file

@ -20,10 +20,13 @@ require 'models/subscription'
require 'models/categorization'
require 'models/category'
require 'models/essay'
require 'models/member'
require 'models/membership'
require 'models/club'
class HasManyThroughAssociationsTest < ActiveRecord::TestCase
fixtures :posts, :readers, :people, :comments, :authors, :categories,
:owners, :pets, :toys, :jobs, :references, :companies,
:owners, :pets, :toys, :jobs, :references, :companies, :members,
:subscribers, :books, :subscriptions, :developers, :categorizations
# Dummies to force column loads so query counts are clean.
@ -557,4 +560,11 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
assert proxy.stale_target?
assert_equal authors(:david).categorizations.sort_by(&:id), post.author_categorizations.sort_by(&:id)
end
def test_create_with_conditions_hash_on_through_association
member = members(:groucho)
club = member.clubs.create!
assert_equal true, club.reload.membership.favourite
end
end

View file

@ -1,4 +1,5 @@
class Club < ActiveRecord::Base
has_one :membership
has_many :memberships
has_many :members, :through => :memberships
has_many :current_memberships
@ -10,4 +11,4 @@ class Club < ActiveRecord::Base
def private_method
"I'm sorry sir, this is a *private* club, not a *pirate* club"
end
end
end

View file

@ -13,4 +13,7 @@ class Member < ActiveRecord::Base
has_many :current_memberships
has_one :club_through_many, :through => :current_memberships, :source => :club
has_many :current_memberships, :conditions => { :favourite => true }
has_many :clubs, :through => :current_memberships
end