aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations.rb
diff options
context:
space:
mode:
authormiloops <miloops@gmail.com>2008-08-30 19:17:29 -0300
committerJeremy Kemper <jeremy@bitsweat.net>2008-08-30 15:24:09 -0700
commitb163d83b8bab9103dc0e73b86212c2629cb45ca2 (patch)
treec19d54af0323dad322016499f8c6ee7dee8bb82c /activerecord/lib/active_record/associations.rb
parentafea4c9b0edb895d3d7ded6bbf45fc55739a96c6 (diff)
downloadrails-b163d83b8bab9103dc0e73b86212c2629cb45ca2.tar.gz
rails-b163d83b8bab9103dc0e73b86212c2629cb45ca2.tar.bz2
rails-b163d83b8bab9103dc0e73b86212c2629cb45ca2.zip
Performance: Better query for ASSOCIATION_ids. Select only ids if the association hasn't been loaded.
Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
Diffstat (limited to 'activerecord/lib/active_record/associations.rb')
-rwxr-xr-xactiverecord/lib/active_record/associations.rb6
1 files changed, 5 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb
index 3ca93db10f..62cc414555 100755
--- a/activerecord/lib/active_record/associations.rb
+++ b/activerecord/lib/active_record/associations.rb
@@ -1304,7 +1304,11 @@ module ActiveRecord
end
define_method("#{reflection.name.to_s.singularize}_ids") do
- send(reflection.name).map { |record| record.id }
+ if send(reflection.name).loaded?
+ send(reflection.name).map(&:id)
+ else
+ send(reflection.name).all(:select => "#{reflection.quoted_table_name}.id").map(&:id)
+ end
end
end