From d4bf5e9b34d8d57be49ac50e31d6ad4151e43947 Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Tue, 7 Aug 2007 09:53:33 +0000 Subject: [PATCH] Make habtm respect the :select option. Closes #9207. [Aleksey Kondratenko] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7279 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../associations/has_and_belongs_to_many_association.rb | 3 ++- activerecord/test/associations_test.rb | 7 +++++++ activerecord/test/fixtures/category.rb | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) 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 d06af335ef..aebe521ca0 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 @@ -53,7 +53,6 @@ module ActiveRecord options[:conditions] = conditions options[:joins] = @join_sql options[:readonly] = finding_with_ambigious_select?(options[:select]) - options[:select] ||= '*' if options[:order] && @reflection.options[:order] options[:order] = "#{options[:order]}, #{@reflection.options[:order]}" @@ -63,6 +62,8 @@ module ActiveRecord merge_options_from_reflection!(options) + options[:select] ||= '*' + # Pass through args exactly as we received them. args << options @reflection.klass.find(*args) diff --git a/activerecord/test/associations_test.rb b/activerecord/test/associations_test.rb index 607f12bdb5..99cb9ac0a1 100755 --- a/activerecord/test/associations_test.rb +++ b/activerecord/test/associations_test.rb @@ -1761,6 +1761,13 @@ class HasAndBelongsToManyAssociationsTest < Test::Unit::TestCase assert welcome.save! end + def test_habtm_respects_select + categories(:technology).select_testing_posts(true).each do |o| + assert_respond_to o, :correctness_marker + end + assert_respond_to categories(:technology).select_testing_posts.find(:first), :correctness_marker + end + def test_updating_attributes_on_rich_associations david = projects(:action_controller).developers.first david.name = "DHH" diff --git a/activerecord/test/fixtures/category.rb b/activerecord/test/fixtures/category.rb index 295bd8277f..71685234e3 100644 --- a/activerecord/test/fixtures/category.rb +++ b/activerecord/test/fixtures/category.rb @@ -3,6 +3,12 @@ class Category < ActiveRecord::Base has_and_belongs_to_many :special_posts, :class_name => "Post" has_and_belongs_to_many :other_posts, :class_name => "Post" + has_and_belongs_to_many(:select_testing_posts, + :class_name => 'Post', + :foreign_key => 'category_id', + :association_foreign_key => 'post_id', + :select => 'posts.*, 1 as correctness_marker') + def self.what_are_you 'a category...' end