Created
May 14, 2011 02:17
-
-
Save AquaGeek/971631 to your computer and use it in GitHub Desktop.
Rails Lighthouse ticket #2594
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From a18537cae85a740d9eca32e359adc8ce74ae02d4 Mon Sep 17 00:00:00 2001 | |
From: Ruy Asan <[email protected]> | |
Date: Fri, 1 May 2009 13:09:29 -0700 | |
Subject: [PATCH] Fixed bug with polymorphic has_one :as pointing to an STI record | |
--- | |
.../associations/has_one_association.rb | 2 +- | |
.../associations/has_one_associations_test.rb | 9 ++++++++- | |
activerecord/test/fixtures/organizations.yml | 4 +++- | |
activerecord/test/fixtures/sponsors.yml | 4 +++- | |
activerecord/test/models/organization.rb | 4 ++++ | |
activerecord/test/schema/schema.rb | 3 ++- | |
6 files changed, 21 insertions(+), 5 deletions(-) | |
diff --git a/activerecord/lib/active_record/associations/has_one_association.rb b/activerecord/lib/active_record/associations/has_one_association.rb | |
index b92cbbd..1464227 100644 | |
--- a/activerecord/lib/active_record/associations/has_one_association.rb | |
+++ b/activerecord/lib/active_record/associations/has_one_association.rb | |
@@ -88,7 +88,7 @@ module ActiveRecord | |
when @reflection.options[:as] | |
@finder_sql = | |
"#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_id = #{owner_quoted_id} AND " + | |
- "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.base_class.name.to_s)}" | |
+ "#{@reflection.quoted_table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote_value(@owner.class.name.to_s)}" | |
else | |
@finder_sql = "#{@reflection.quoted_table_name}.#{@reflection.primary_key_name} = #{owner_quoted_id}" | |
end | |
diff --git a/activerecord/test/cases/associations/has_one_associations_test.rb b/activerecord/test/cases/associations/has_one_associations_test.rb | |
index 1ddb3f4..2ea8ddb 100644 | |
--- a/activerecord/test/cases/associations/has_one_associations_test.rb | |
+++ b/activerecord/test/cases/associations/has_one_associations_test.rb | |
@@ -2,9 +2,11 @@ require "cases/helper" | |
require 'models/developer' | |
require 'models/project' | |
require 'models/company' | |
+require 'models/sponsor' | |
+require 'models/organization' | |
class HasOneAssociationsTest < ActiveRecord::TestCase | |
- fixtures :accounts, :companies, :developers, :projects, :developers_projects | |
+ fixtures :accounts, :companies, :developers, :projects, :developers_projects, :organizations, :sponsors | |
def setup | |
Account.destroyed_account_ids.clear | |
@@ -306,4 +308,9 @@ class HasOneAssociationsTest < ActiveRecord::TestCase | |
Firm.find(@firm.id, :include => :account).save! | |
end | |
end | |
+ | |
+ def test_polymorphic_sti | |
+ assert_equal organizations(:sponsorable), sponsors(:org_sponsor).sponsorable | |
+ assert_equal sponsors(:org_sponsor), organizations(:sponsorable).sponsor | |
+ end | |
end | |
diff --git a/activerecord/test/fixtures/organizations.yml b/activerecord/test/fixtures/organizations.yml | |
index 25295bf..05d620f 100644 | |
--- a/activerecord/test/fixtures/organizations.yml | |
+++ b/activerecord/test/fixtures/organizations.yml | |
@@ -2,4 +2,6 @@ nsa: | |
name: No Such Agency | |
discordians: | |
name: Discordians | |
- | |
+sponsorable: | |
+ name: We Need Money | |
+ type: SponsorableOrganization | |
diff --git a/activerecord/test/fixtures/sponsors.yml b/activerecord/test/fixtures/sponsors.yml | |
index 42df895..97a7784 100644 | |
--- a/activerecord/test/fixtures/sponsors.yml | |
+++ b/activerecord/test/fixtures/sponsors.yml | |
@@ -6,4 +6,6 @@ boring_club_sponsor_for_groucho: | |
sponsorable: some_other_guy (Member) | |
crazy_club_sponsor_for_groucho: | |
sponsor_club: crazy_club | |
- sponsorable: some_other_guy (Member) | |
\ No newline at end of file | |
+ sponsorable: some_other_guy (Member) | |
+org_sponsor: | |
+ sponsorable: sponsorable (SponsorableOrganization) | |
\ No newline at end of file | |
diff --git a/activerecord/test/models/organization.rb b/activerecord/test/models/organization.rb | |
index d79d503..5d13083 100644 | |
--- a/activerecord/test/models/organization.rb | |
+++ b/activerecord/test/models/organization.rb | |
@@ -1,4 +1,8 @@ | |
class Organization < ActiveRecord::Base | |
has_many :member_details | |
has_many :members, :through => :member_details | |
+end | |
+ | |
+class SponsorableOrganization < Organization | |
+ has_one :sponsor, :as => :sponsorable | |
end | |
\ No newline at end of file | |
diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb | |
index ea848a2..251e5f0 100644 | |
--- a/activerecord/test/schema/schema.rb | |
+++ b/activerecord/test/schema/schema.rb | |
@@ -277,6 +277,7 @@ ActiveRecord::Schema.define do | |
create_table :organizations, :force => true do |t| | |
t.string :name | |
+ t.string :type | |
end | |
create_table :owners, :primary_key => :owner_id ,:force => true do |t| | |
@@ -380,7 +381,7 @@ ActiveRecord::Schema.define do | |
create_table :sponsors, :force => true do |t| | |
t.integer :club_id | |
t.integer :sponsorable_id | |
- t.string :sponsorable_type | |
+ t.string :sponsorable_type | |
end | |
create_table :subscribers, :force => true, :id => false do |t| | |
-- | |
1.6.0.1 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment