Created
January 7, 2011 01:11
-
-
Save ernie/768943 to your computer and use it in GitHub Desktop.
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 1be13d1c88ca518996135e89454c17691afbcc51 Mon Sep 17 00:00:00 2001 | |
From: Ernie Miller <[email protected]> | |
Date: Thu, 6 Jan 2011 20:06:29 -0500 | |
Subject: [PATCH] Fix polymorphic belongs_to associationproxy raising errors when loading target. | |
--- | |
.../belongs_to_polymorphic_association.rb | 5 +++++ | |
.../associations/belongs_to_associations_test.rb | 9 +++++++++ | |
activerecord/test/models/sponsor.rb | 2 ++ | |
3 files changed, 16 insertions(+), 0 deletions(-) | |
diff --git a/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb b/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb | |
index 4f67b02..cae35fe 100644 | |
--- a/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb | |
+++ b/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb | |
@@ -4,6 +4,11 @@ module ActiveRecord | |
class BelongsToPolymorphicAssociation < BelongsToAssociation #:nodoc: | |
private | |
+ def conditions | |
+ @conditions ||= interpolate_sql(target_klass.send(:sanitize_sql, @reflection.options[:conditions])) if @reflection.options[:conditions] | |
+ end | |
+ alias :sql_conditions :conditions | |
+ | |
def replace_keys(record) | |
super | |
@owner[@reflection.foreign_type] = record && record.class.base_class.name | |
diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb | |
index aaa5421..620f4e9 100644 | |
--- a/activerecord/test/cases/associations/belongs_to_associations_test.rb | |
+++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb | |
@@ -146,6 +146,15 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase | |
assert_not_nil Company.find(3).firm_with_condition, "Microsoft should have a firm" | |
end | |
+ def test_with_polymorphic_and_condition | |
+ sponsor = Sponsor.create | |
+ member = Member.create :name => "Bert" | |
+ sponsor.sponsorable = member | |
+ | |
+ assert_equal member, sponsor.sponsorable | |
+ assert_nil sponsor.sponsorable_with_conditions | |
+ end | |
+ | |
def test_with_select | |
assert_equal Company.find(2).firm_with_select.attributes.size, 1 | |
assert_equal Company.find(2, :include => :firm_with_select ).firm_with_select.attributes.size, 1 | |
diff --git a/activerecord/test/models/sponsor.rb b/activerecord/test/models/sponsor.rb | |
index 7e5a1dc..aa4a363 100644 | |
--- a/activerecord/test/models/sponsor.rb | |
+++ b/activerecord/test/models/sponsor.rb | |
@@ -2,4 +2,6 @@ class Sponsor < ActiveRecord::Base | |
belongs_to :sponsor_club, :class_name => "Club", :foreign_key => "club_id" | |
belongs_to :sponsorable, :polymorphic => true | |
belongs_to :thing, :polymorphic => true, :foreign_type => :sponsorable_type, :foreign_key => :sponsorable_id | |
+ belongs_to :sponsorable_with_conditions, :polymorphic => true, | |
+ :foreign_type => 'sponsorable_type', :foreign_key => 'sponsorable_id', :conditions => {:name => 'Ernie'} | |
end | |
-- | |
1.7.2.2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment