aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/associations')
-rw-r--r--activerecord/lib/active_record/associations/association_proxy.rb13
-rw-r--r--activerecord/lib/active_record/associations/belongs_to_association.rb2
-rw-r--r--activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb2
-rw-r--r--activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb8
-rw-r--r--activerecord/lib/active_record/associations/has_many_association.rb5
-rw-r--r--activerecord/lib/active_record/associations/has_many_through_association.rb4
-rw-r--r--activerecord/lib/active_record/associations/has_one_association.rb2
7 files changed, 24 insertions, 12 deletions
diff --git a/activerecord/lib/active_record/associations/association_proxy.rb b/activerecord/lib/active_record/associations/association_proxy.rb
index d340cc30e3..4ddeb84a58 100644
--- a/activerecord/lib/active_record/associations/association_proxy.rb
+++ b/activerecord/lib/active_record/associations/association_proxy.rb
@@ -14,14 +14,23 @@ module ActiveRecord
def respond_to?(symbol, include_priv = false)
proxy_respond_to?(symbol, include_priv) || (load_target && @target.respond_to?(symbol, include_priv))
end
-
+
# Explicitly proxy === because the instance method removal above
# doesn't catch it.
def ===(other)
load_target
other === @target
end
-
+
+ def aliased_table_name
+ @reflection.klass.table_name
+ end
+
+ def conditions
+ @conditions ||= eval("%(#{@reflection.options[:conditions]})") if @reflection.options[:conditions]
+ end
+ alias :sql_conditions :conditions
+
def reset
@target = nil
@loaded = false
diff --git a/activerecord/lib/active_record/associations/belongs_to_association.rb b/activerecord/lib/active_record/associations/belongs_to_association.rb
index 8955c0dc31..1752678cbd 100644
--- a/activerecord/lib/active_record/associations/belongs_to_association.rb
+++ b/activerecord/lib/active_record/associations/belongs_to_association.rb
@@ -43,7 +43,7 @@ module ActiveRecord
def find_target
@reflection.klass.find(
@owner[@reflection.primary_key_name],
- :conditions => @reflection.options[:conditions] ? interpolate_sql(@reflection.options[:conditions]) : nil,
+ :conditions => conditions,
:include => @reflection.options[:include]
)
end
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 6d0704db74..9549b959fc 100644
--- a/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb
+++ b/activerecord/lib/active_record/associations/belongs_to_polymorphic_association.rb
@@ -30,7 +30,7 @@ module ActiveRecord
if @reflection.options[:conditions]
association_class.find(
@owner[@reflection.primary_key_name],
- :conditions => interpolate_sql(@reflection.options[:conditions]),
+ :conditions => conditions,
:include => @reflection.options[:include]
)
else
diff --git a/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb b/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
index 5b203dcc57..25c23c63b7 100644
--- a/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
+++ b/activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb
@@ -144,7 +144,11 @@ module ActiveRecord
@owner.connection.execute(sql)
end
end
-
+
+ #def aliased_join_table_name
+ # @reflection.options[:join_table]
+ #end
+
def construct_sql
interpolate_sql_options!(@reflection.options, :finder_sql)
@@ -152,7 +156,7 @@ module ActiveRecord
@finder_sql = @reflection.options[:finder_sql]
else
@finder_sql = "#{@reflection.options[:join_table]}.#{@reflection.primary_key_name} = #{@owner.quoted_id} "
- @finder_sql << " AND (#{interpolate_sql(@reflection.options[:conditions])})" if @reflection.options[:conditions]
+ @finder_sql << " AND (#{conditions})" if conditions
end
@join_sql = "JOIN #{@reflection.options[:join_table]} ON #{@reflection.klass.table_name}.#{@reflection.klass.primary_key} = #{@reflection.options[:join_table]}.#{@reflection.association_foreign_key}"
diff --git a/activerecord/lib/active_record/associations/has_many_association.rb b/activerecord/lib/active_record/associations/has_many_association.rb
index 8b471859c1..8d82de0d01 100644
--- a/activerecord/lib/active_record/associations/has_many_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_association.rb
@@ -3,7 +3,6 @@ module ActiveRecord
class HasManyAssociation < AssociationCollection #:nodoc:
def initialize(owner, reflection)
super
- @conditions = sanitize_sql(reflection.options[:conditions])
construct_sql
end
@@ -169,11 +168,11 @@ module ActiveRecord
@finder_sql =
"#{@reflection.klass.table_name}.#{@reflection.options[:as]}_id = #{@owner.quoted_id} AND " +
"#{@reflection.klass.table_name}.#{@reflection.options[:as]}_type = #{@owner.class.quote @owner.class.base_class.name.to_s}"
- @finder_sql << " AND (#{interpolate_sql(@conditions)})" if @conditions
+ @finder_sql << " AND (#{conditions})" if conditions
else
@finder_sql = "#{@reflection.klass.table_name}.#{@reflection.primary_key_name} = #{@owner.quoted_id}"
- @finder_sql << " AND (#{interpolate_sql(@conditions)})" if @conditions
+ @finder_sql << " AND (#{conditions})" if conditions
end
if @reflection.options[:counter_sql]
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 6db5eae0bc..009ac7c53a 100644
--- a/activerecord/lib/active_record/associations/has_many_through_association.rb
+++ b/activerecord/lib/active_record/associations/has_many_through_association.rb
@@ -74,7 +74,7 @@ module ActiveRecord
"AND #{through_reflection.table_name}.#{through_reflection.primary_key_name} = #{@owner.quoted_id}"
end
- conditions << " AND (#{interpolate_sql(sanitize_sql(@reflection.options[:conditions]))})" if @reflection.options[:conditions]
+ conditions << " AND (#{sql_conditions})" if sql_conditions
return conditions
end
@@ -100,7 +100,7 @@ module ActiveRecord
@finder_sql = interpolate_sql(@reflection.options[:finder_sql])
@finder_sql = "#{@reflection.klass.table_name}.#{@reflection.primary_key_name} = #{@owner.quoted_id}"
- @finder_sql << " AND (#{interpolate_sql(@conditions)})" if @conditions
+ @finder_sql << " AND (#{conditions})" if conditions
end
if @reflection.options[:counter_sql]
diff --git a/activerecord/lib/active_record/associations/has_one_association.rb b/activerecord/lib/active_record/associations/has_one_association.rb
index e0d6f64b27..e881d49420 100644
--- a/activerecord/lib/active_record/associations/has_one_association.rb
+++ b/activerecord/lib/active_record/associations/has_one_association.rb
@@ -73,7 +73,7 @@ module ActiveRecord
else
@finder_sql = "#{@reflection.table_name}.#{@reflection.primary_key_name} = #{@owner.quoted_id}"
end
- @finder_sql << " AND (#{sanitize_sql(@reflection.options[:conditions])})" if @reflection.options[:conditions]
+ @finder_sql << " AND (#{conditions})" if conditions
end
end
end