aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2007-08-07 09:53:33 +0000
committerMichael Koziarski <michael@koziarski.com>2007-08-07 09:53:33 +0000
commitd4bf5e9b34d8d57be49ac50e31d6ad4151e43947 (patch)
tree984f5e82d68a3766c532ca6d1039e93c3fb777ca
parentbb94ce92fc1486f7a3d2077e073dd50ce758567d (diff)
downloadrails-d4bf5e9b34d8d57be49ac50e31d6ad4151e43947.tar.gz
rails-d4bf5e9b34d8d57be49ac50e31d6ad4151e43947.tar.bz2
rails-d4bf5e9b34d8d57be49ac50e31d6ad4151e43947.zip
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
-rw-r--r--activerecord/lib/active_record/associations/has_and_belongs_to_many_association.rb3
-rwxr-xr-xactiverecord/test/associations_test.rb7
-rw-r--r--activerecord/test/fixtures/category.rb6
3 files changed, 15 insertions, 1 deletions
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