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:
parent
c5e912a8b3
commit
3fa61ccb9e
4 changed files with 16 additions and 6 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue