diff options
author | John Devine <johnjdevine@gmail.com> | 2008-05-04 14:08:19 -0500 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-05-15 13:42:28 +0100 |
commit | b28b54cab090bed8f099ef375b419a8f92390dd4 (patch) | |
tree | e697ac7a8585f48ee92d39f6eaf102e3c63692cf /activerecord/lib/active_record | |
parent | 6df995bbf2f0fcb26b7a1ba8d4e41ed9de77b6c8 (diff) | |
download | rails-b28b54cab090bed8f099ef375b419a8f92390dd4.tar.gz rails-b28b54cab090bed8f099ef375b419a8f92390dd4.tar.bz2 rails-b28b54cab090bed8f099ef375b419a8f92390dd4.zip |
Make sure needed table joins are included :select option. [#110 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/associations.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index fb5f1f8a8c..7862f8ad9d 100644 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1500,6 +1500,12 @@ module ActiveRecord order.scan(/([\.\w]+).?\./).flatten end + def selects_tables(options) + select = options[:select] + return [] unless select && select.is_a?(String) + select.scan(/"?([\.\w]+)"?.?\./).flatten + end + # Checks if the conditions reference a table other than the current model table def include_eager_conditions?(options,tables = nil) tables = conditions_tables(options) @@ -1518,8 +1524,16 @@ module ActiveRecord end end + def include_eager_select?(options) + selects = selects_tables(options) + return false unless selects.any? + selects.any? do |select| + select != table_name + end + end + def references_eager_loaded_tables?(options) - include_eager_order?(options) || include_eager_conditions?(options) + include_eager_order?(options) || include_eager_conditions?(options) || include_eager_select?(options) end def using_limitable_reflections?(reflections) |