From 55b6697493e2fc39f3e2a7b6b3c8bcfb94947daa Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 12 Nov 2007 15:02:12 +0000 Subject: Fixed that has_many :through associations should render as collections too (closes #9051) [mathie/danger] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8130 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_view/partials.rb | 2 +- .../render_partial_with_record_identification_test.rb | 10 ++++++++++ actionpack/test/fixtures/db_definitions/sqlite.sql | 3 ++- actionpack/test/fixtures/developer.rb | 2 ++ actionpack/test/fixtures/replies.yml | 2 ++ actionpack/test/fixtures/reply.rb | 3 ++- 7 files changed, 21 insertions(+), 3 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 6d20c608c7..30367bebc0 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that has_many :through associations should render as collections too #9051 [mathie/danger] + * Added :mouseover short-cut to AssetTagHelper#image_tag for doing easy image swaps #6893 [joost] * Fixed handling of non-domain hosts #9479 [purp] diff --git a/actionpack/lib/action_view/partials.rb b/actionpack/lib/action_view/partials.rb index 17556b3141..b0570ef78c 100644 --- a/actionpack/lib/action_view/partials.rb +++ b/actionpack/lib/action_view/partials.rb @@ -119,7 +119,7 @@ module ActionView else render("#{path}/_#{partial_name}", local_assigns) end - when Array, ActiveRecord::Associations::AssociationCollection + when Array, ActiveRecord::Associations::AssociationCollection, ActiveRecord::Associations::HasManyThroughAssociation if partial_path.any? path = ActionController::RecordIdentifier.partial_path(partial_path.first) collection = partial_path diff --git a/actionpack/test/activerecord/render_partial_with_record_identification_test.rb b/actionpack/test/activerecord/render_partial_with_record_identification_test.rb index 7aeb1192f1..ccebbefead 100644 --- a/actionpack/test/activerecord/render_partial_with_record_identification_test.rb +++ b/actionpack/test/activerecord/render_partial_with_record_identification_test.rb @@ -14,6 +14,11 @@ class RenderPartialWithRecordIdentificationTest < ActiveRecordTestCase render :partial => @topic.replies end + def render_with_has_many_through_association + @developer = Developer.find(:first) + render :partial => @developer.topics + end + def render_with_belongs_to_association @reply = Reply.find(1) render :partial => @reply.topic @@ -47,6 +52,11 @@ class RenderPartialWithRecordIdentificationTest < ActiveRecordTestCase assert_template 'replies/_reply' end + def test_rendering_partial_with_has_many_association + get :render_with_has_many_through_association + assert_template 'topics/_topic' + end + def test_rendering_partial_with_belongs_to_association get :render_with_belongs_to_association assert_template 'topics/_topic' diff --git a/actionpack/test/fixtures/db_definitions/sqlite.sql b/actionpack/test/fixtures/db_definitions/sqlite.sql index b4e7539d16..358c2bbb04 100644 --- a/actionpack/test/fixtures/db_definitions/sqlite.sql +++ b/actionpack/test/fixtures/db_definitions/sqlite.sql @@ -9,7 +9,8 @@ CREATE TABLE 'replies' ( 'content' text, 'created_at' datetime, 'updated_at' datetime, - 'topic_id' integer + 'topic_id' integer, + 'developer_id' integer ); CREATE TABLE 'topics' ( diff --git a/actionpack/test/fixtures/developer.rb b/actionpack/test/fixtures/developer.rb index f5e5b901fd..c70eda34c6 100644 --- a/actionpack/test/fixtures/developer.rb +++ b/actionpack/test/fixtures/developer.rb @@ -1,5 +1,7 @@ class Developer < ActiveRecord::Base has_and_belongs_to_many :projects + has_many :replies + has_many :topics, :through => :replies end class DeVeLoPeR < ActiveRecord::Base diff --git a/actionpack/test/fixtures/replies.yml b/actionpack/test/fixtures/replies.yml index 284c9c0796..a17d2fc42b 100644 --- a/actionpack/test/fixtures/replies.yml +++ b/actionpack/test/fixtures/replies.yml @@ -1,6 +1,7 @@ witty_retort: id: 1 topic_id: 1 + developer_id: 1 content: Birdman is better! created_at: <%= 6.hours.ago.to_s(:db) %> updated_at: nil @@ -8,6 +9,7 @@ witty_retort: another: id: 2 topic_id: 2 + developer_id: 1 content: Nuh uh! created_at: <%= 1.hour.ago.to_s(:db) %> updated_at: nil \ No newline at end of file diff --git a/actionpack/test/fixtures/reply.rb b/actionpack/test/fixtures/reply.rb index ea84042b9a..588713de1e 100644 --- a/actionpack/test/fixtures/reply.rb +++ b/actionpack/test/fixtures/reply.rb @@ -1,5 +1,6 @@ class Reply < ActiveRecord::Base belongs_to :topic, :include => [:replies] - + belongs_to :developer + validates_presence_of :content end -- cgit v1.2.3