diff options
author | Nat Budin <nbudin@patientslikeme.com> | 2014-06-17 10:11:22 -0700 |
---|---|---|
committer | Nat Budin <nbudin@patientslikeme.com> | 2014-06-17 10:15:04 -0700 |
commit | 30b76e5575c57056361741ebbede972f8ef477de (patch) | |
tree | b6c0b24bc6e1242ca8170f46c8223d1537171ebd /activerecord | |
parent | 0c2fbc509545612908dd7bbdde3221518a2ec0e1 (diff) | |
download | rails-30b76e5575c57056361741ebbede972f8ef477de.tar.gz rails-30b76e5575c57056361741ebbede972f8ef477de.tar.bz2 rails-30b76e5575c57056361741ebbede972f8ef477de.zip |
Don't include inheritance column in the through_scope_attributes
Diffstat (limited to 'activerecord')
3 files changed, 17 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/associations/has_many_through_association.rb b/activerecord/lib/active_record/associations/has_many_through_association.rb index 175019a72b..96466ac7c7 100644 --- a/activerecord/lib/active_record/associations/has_many_through_association.rb +++ b/activerecord/lib/active_record/associations/has_many_through_association.rb @@ -93,7 +93,7 @@ module ActiveRecord end def through_scope_attributes - scope.where_values_hash(through_association.reflection.name.to_s).except!(through_association.reflection.foreign_key) + scope.where_values_hash(through_association.reflection.name.to_s).except!(through_association.reflection.foreign_key, through_association.reflection.klass.inheritance_column) end def save_through_record(record) diff --git a/activerecord/test/cases/associations/has_many_through_associations_test.rb b/activerecord/test/cases/associations/has_many_through_associations_test.rb index 8641584c0c..ad2aa99af5 100644 --- a/activerecord/test/cases/associations/has_many_through_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_through_associations_test.rb @@ -1139,4 +1139,12 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase assert_equal 2, post.lazy_readers_unscope_skimmers.to_a.size assert_equal 2, post.lazy_people_unscope_skimmers.to_a.size end + + def test_has_many_through_add_with_sti_middle_relation + club = SuperClub.create!(name: 'Fight Club') + member = Member.create!(name: 'Tyler Durden') + + club.members << member + assert_equal 1, SuperMembership.where(member_id: member.id, club_id: club.id).count + end end diff --git a/activerecord/test/models/club.rb b/activerecord/test/models/club.rb index a762ad4bb5..b260b6458a 100644 --- a/activerecord/test/models/club.rb +++ b/activerecord/test/models/club.rb @@ -5,7 +5,7 @@ class Club < ActiveRecord::Base has_one :sponsor has_one :sponsored_member, :through => :sponsor, :source => :sponsorable, :source_type => "Member" belongs_to :category - + has_many :favourites, -> { where(memberships: { favourite: true }) }, through: :memberships, source: :member private @@ -14,3 +14,10 @@ class Club < ActiveRecord::Base "I'm sorry sir, this is a *private* club, not a *pirate* club" end end + +class SuperClub < ActiveRecord::Base + self.table_name = "clubs" + + has_many :memberships, :class_name => "SuperMembership", :foreign_key => "club_id" + has_many :members, :through => :memberships +end
\ No newline at end of file |