aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-02-27 11:29:16 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2012-02-27 11:29:16 -0800
commit4f82553e545eee290f1fffa5f329b78b4a81b732 (patch)
tree66068055bb1eff8d33aaa179e1a7052cac2584f4
parent2adf78d335dd55ef39559e9e209f1ce96c948095 (diff)
downloadrails-4f82553e545eee290f1fffa5f329b78b4a81b732.tar.gz
rails-4f82553e545eee290f1fffa5f329b78b4a81b732.tar.bz2
rails-4f82553e545eee290f1fffa5f329b78b4a81b732.zip
bind value creation refactoring
-rw-r--r--activerecord/lib/active_record/associations/association_scope.rb14
1 files changed, 10 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/associations/association_scope.rb b/activerecord/lib/active_record/associations/association_scope.rb
index 56a7df0944..2972b7e13e 100644
--- a/activerecord/lib/active_record/associations/association_scope.rb
+++ b/activerecord/lib/active_record/associations/association_scope.rb
@@ -38,13 +38,18 @@ module ActiveRecord
columns[column_name]
end
- def bind(scope, column, value)
+ def bind_value(scope, column, value)
substitute = alias_tracker.connection.substitute_at(
column, scope.bind_values.length)
scope.bind_values += [[column, value]]
substitute
end
+ def bind(scope, table_name, column_name, value)
+ column = column_for table_name, column_name
+ bind_value scope, column, value
+ end
+
def add_constraints(scope)
tables = construct_tables
@@ -79,12 +84,13 @@ module ActiveRecord
conditions = self.conditions[i]
if reflection == chain.last
- column = column_for(table.table_name, key.to_s)
- bind_val = bind(scope, column, owner[foreign_key])
+ bind_val = bind scope, table.table_name, key.to_s, owner[foreign_key]
scope = scope.where(table[key].eq(bind_val))
if reflection.type
- scope = scope.where(table[reflection.type].eq(owner.class.base_class.name))
+ value = owner.class.base_class.name
+ bind_val = bind scope, table.table_name, reflection.type.to_s, value
+ scope = scope.where(table[reflection.type].eq(bind_val))
end
conditions.each do |condition|