diff options
| author | Jon Leighton <j@jonathanleighton.com> | 2010-10-19 12:47:19 +0100 | 
|---|---|---|
| committer | Jon Leighton <j@jonathanleighton.com> | 2010-10-19 12:47:19 +0100 | 
| commit | 596cc3b2329a9cc4a30c95c157ce36b2d08975df (patch) | |
| tree | 2a67f6a9270bb528ad5df8bc805f2ef121e93858 /activerecord/test | |
| parent | 9ec07348749675110843c44f680da79223218db2 (diff) | |
| download | rails-596cc3b2329a9cc4a30c95c157ce36b2d08975df.tar.gz rails-596cc3b2329a9cc4a30c95c157ce36b2d08975df.tar.bz2 rails-596cc3b2329a9cc4a30c95c157ce36b2d08975df.zip | |
Respect the :primary_key option on the through_reflection of (non-nested) through associations
Diffstat (limited to 'activerecord/test')
| -rw-r--r-- | activerecord/test/cases/associations/has_many_through_associations_test.rb | 19 | ||||
| -rw-r--r-- | activerecord/test/cases/associations/has_one_through_associations_test.rb | 20 | ||||
| -rw-r--r-- | activerecord/test/fixtures/essays.yml | 6 | ||||
| -rw-r--r-- | activerecord/test/models/author.rb | 12 | ||||
| -rw-r--r-- | activerecord/test/models/essay.rb | 1 | ||||
| -rw-r--r-- | activerecord/test/schema/schema.rb | 2 | 
6 files changed, 57 insertions, 3 deletions
| diff --git a/activerecord/test/cases/associations/has_many_through_associations_test.rb b/activerecord/test/cases/associations/has_many_through_associations_test.rb index 4b9f49f1ec..5a2e6b26aa 100644 --- a/activerecord/test/cases/associations/has_many_through_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_through_associations_test.rb @@ -17,11 +17,14 @@ require 'models/developer'  require 'models/subscriber'  require 'models/book'  require 'models/subscription' +require 'models/essay' +require 'models/category'  class HasManyThroughAssociationsTest < ActiveRecord::TestCase    fixtures :posts, :readers, :people, :comments, :authors,             :owners, :pets, :toys, :jobs, :references, :companies, -           :subscribers, :books, :subscriptions, :developers +           :subscribers, :books, :subscriptions, :developers, +           :essays, :categories    # Dummies to force column loads so query counts are clean.    def setup @@ -449,4 +452,18 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase      comment = post.comments.build      assert author.comments.include?(comment)    end + +  def test_has_many_through_polymorphic_with_primary_key_option_on_through_reflection +    assert_equal [categories(:general)], authors(:david).essay_categories +     +    authors = Author.joins(:essay_categories).where('categories.id' => categories(:general).id) +    assert_equal authors(:david), authors.first +  end +   +  def test_has_many_through_with_primary_key_option_on_through_reflection +    assert_equal [categories(:general)], authors(:david).essay_categories_2 +     +    authors = Author.joins(:essay_categories_2).where('categories.id' => categories(:general).id) +    assert_equal authors(:david), authors.first +  end  end diff --git a/activerecord/test/cases/associations/has_one_through_associations_test.rb b/activerecord/test/cases/associations/has_one_through_associations_test.rb index 5d153147f5..8805968869 100644 --- a/activerecord/test/cases/associations/has_one_through_associations_test.rb +++ b/activerecord/test/cases/associations/has_one_through_associations_test.rb @@ -9,9 +9,13 @@ require 'models/member_detail'  require 'models/minivan'  require 'models/dashboard'  require 'models/speedometer' +require 'models/category' +require 'models/author' +require 'models/essay'  class HasOneThroughAssociationsTest < ActiveRecord::TestCase -  fixtures :member_types, :members, :clubs, :memberships, :sponsors, :organizations, :minivans, :dashboards, :speedometers +  fixtures :member_types, :members, :clubs, :memberships, :sponsors, :organizations, :minivans, +           :dashboards, :speedometers, :categories, :authors, :essays    def setup      @member = members(:groucho) @@ -212,4 +216,18 @@ class HasOneThroughAssociationsTest < ActiveRecord::TestCase        minivan.dashboard      end    end +   +  def test_has_one_through_polymorphic_with_primary_key_option_on_through_reflection +    assert_equal categories(:general), authors(:david).essay_category +     +    authors = Author.joins(:essay_category).where('categories.id' => categories(:general).id) +    assert_equal authors(:david), authors.first +  end +   +  def test_has_one_through_with_primary_key_option_on_through_reflection +    assert_equal categories(:general), authors(:david).essay_category_2 +     +    authors = Author.joins(:essay_category_2).where('categories.id' => categories(:general).id) +    assert_equal authors(:david), authors.first +  end  end diff --git a/activerecord/test/fixtures/essays.yml b/activerecord/test/fixtures/essays.yml new file mode 100644 index 0000000000..8c96a469e6 --- /dev/null +++ b/activerecord/test/fixtures/essays.yml @@ -0,0 +1,6 @@ +david_modest_proposal: +  name: A Modest Proposal +  writer_type: Author +  writer_id: David +  category_id: 1 +  author_id: David diff --git a/activerecord/test/models/author.rb b/activerecord/test/models/author.rb index c0e082836d..1ba01d6b6b 100644 --- a/activerecord/test/models/author.rb +++ b/activerecord/test/models/author.rb @@ -95,8 +95,18 @@ class Author < ActiveRecord::Base    has_many :subscriptions,        :through => :books    has_many :subscribers,          :through => :subscriptions, :order => "subscribers.nick" # through has_many :through (on through reflection)    has_many :distinct_subscribers, :through => :subscriptions, :source => :subscriber, :select => "DISTINCT subscribers.*", :order => "subscribers.nick" - +      has_one :essay, :primary_key => :name, :as => :writer +  has_one :essay_category, :through => :essay, :source => :category + +  has_one :essay_2, :primary_key => :name, :class_name => 'Essay', :foreign_key => :author_id +  has_one :essay_category_2, :through => :essay_2, :source => :category + +  has_many :essays, :primary_key => :name, :as => :writer +  has_many :essay_categories, :through => :essays, :source => :category +   +  has_many :essays_2, :primary_key => :name, :class_name => 'Essay', :foreign_key => :author_id +  has_many :essay_categories_2, :through => :essays_2, :source => :category    belongs_to :author_address,       :dependent => :destroy    belongs_to :author_address_extra, :dependent => :delete, :class_name => "AuthorAddress" diff --git a/activerecord/test/models/essay.rb b/activerecord/test/models/essay.rb index 6c28f5e49b..6a62042863 100644 --- a/activerecord/test/models/essay.rb +++ b/activerecord/test/models/essay.rb @@ -1,3 +1,4 @@  class Essay < ActiveRecord::Base    belongs_to :writer, :primary_key => :name, :polymorphic => true +  belongs_to :category  end diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index ee129162a6..b5bf9a7349 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -214,6 +214,8 @@ ActiveRecord::Schema.define do      t.string :name      t.string :writer_id      t.string :writer_type +    t.integer :category_id +    t.integer :author_id    end    create_table :events, :force => true do |t| | 
