aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/association_preload.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-02-14 11:51:56 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2011-02-14 11:51:56 -0800
commit0123ceb9cd1ae352308184852cae1edbd62155e1 (patch)
treee52d0c9c4fdca1f5e263e38faa10877eaa3190ec /activerecord/lib/active_record/association_preload.rb
parent6f4e3ffd0f42c92a00536e7e1356be3e8cf37639 (diff)
parentb9ea751d0e56bd00d341766977a607ed3f7ddd0f (diff)
downloadrails-0123ceb9cd1ae352308184852cae1edbd62155e1.tar.gz
rails-0123ceb9cd1ae352308184852cae1edbd62155e1.tar.bz2
rails-0123ceb9cd1ae352308184852cae1edbd62155e1.zip
Merge remote branch 'jonleighton/association_fixes'
* jonleighton/association_fixes: Add a transaction wrapper in add_to_target. This means that #build will now also use a transaction. IMO this is reasonable given that the before_add and after_add callbacks might do anything, and this great consistency allows us to abstract out the duplicate code from #build and #create. Inline ensure_owner_is_persisted! as it is only called from one place @target should always be an array Rename add_record_to_target_with_callbacks to add_to_target Don't pass the block through build_record Move create and create! next to build Get rid of create_record as it is not only used in one place Get rid of AssociationCollection#save_record Fix test/cases/connection_pool_test.rb for sqlite3 in-memory db Add interpolation of association conditions back in, in the form of proc { ... } rather than instance_eval-ing strings
Diffstat (limited to 'activerecord/lib/active_record/association_preload.rb')
-rw-r--r--activerecord/lib/active_record/association_preload.rb12
1 files changed, 10 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb
index b83c00e9f8..52d2c49836 100644
--- a/activerecord/lib/active_record/association_preload.rb
+++ b/activerecord/lib/active_record/association_preload.rb
@@ -399,10 +399,18 @@ module ActiveRecord
end
end
+ def process_conditions(conditions, klass = self)
+ if conditions.respond_to?(:to_proc)
+ conditions = instance_eval(&conditions)
+ end
+
+ klass.send(:sanitize_sql, conditions)
+ end
+
def append_conditions(reflection, preload_options)
[
- ("(#{reflection.sanitized_conditions})" if reflection.sanitized_conditions),
- ("(#{sanitize_sql preload_options[:conditions]})" if preload_options[:conditions]),
+ ('(' + process_conditions(reflection.options[:conditions], reflection.klass) + ')' if reflection.options[:conditions]),
+ ('(' + process_conditions(preload_options[:conditions]) + ')' if preload_options[:conditions]),
].compact.map { |x| Arel.sql x }
end