Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ernie/768943 to your computer and use it in GitHub Desktop.
Save ernie/768943 to your computer and use it in GitHub Desktop.
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