diff --git a/activerecord/test/cases/associations/habtm_join_table_test.rb b/activerecord/test/cases/associations/habtm_join_table_test.rb index bf3e04c..2512554 100644 --- a/activerecord/test/cases/associations/habtm_join_table_test.rb +++ b/activerecord/test/cases/associations/habtm_join_table_test.rb @@ -1,11 +1,22 @@ require 'cases/helper' class MyReader < ActiveRecord::Base - has_and_belongs_to_many :my_books + has_and_belongs_to_many :my_books do + def unreviewed_books + self.find(:all, + :joins => "left join my_book_reviews on my_books.my_book_id = my_book_reviews.my_book_id", + :conditions => "my_book_reviews.my_book_id is null") + end + end end class MyBook < ActiveRecord::Base has_and_belongs_to_many :my_readers + has_many :my_book_reviews +end + +class MyBookReviews < ActiveRecord::Base + belongs_to :my_book end class HabtmJoinTableTest < ActiveRecord::TestCase @@ -25,12 +36,20 @@ class HabtmJoinTableTest < ActiveRecord::TestCase t.integer :my_reader_id end assert ActiveRecord::Base.connection.table_exists?(:my_books_my_readers) + + ActiveRecord::Base.connection.create_table :my_book_reviews, :force => true do |t| + t.integer :my_book_review_id + t.integer :my_book_id + end + assert ActiveRecord::Base.connection.table_exists?(:my_book_reviews) + end def teardown ActiveRecord::Base.connection.drop_table :my_books ActiveRecord::Base.connection.drop_table :my_readers ActiveRecord::Base.connection.drop_table :my_books_my_readers + ActiveRecord::Base.connection.drop_table :my_book_reviews end uses_transaction :test_should_raise_exception_when_join_table_has_a_primary_key @@ -53,4 +72,11 @@ class HabtmJoinTableTest < ActiveRecord::TestCase weaz.my_books << MyBook.create(:name=>'Greater Expectations') end end + + + uses_transaction :test_should_allow_join_in_association_function + def test_should_allow_join_in_association_function + jaime = MyReader.create(:name=>"Jaime") + assert_nil jaime.my_books.unreviewed_books + end end