Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Revert c6db37e (Don't allow a has_one association to go :through a co…

…llection association) - this is very useful, the test cases showed an example (it is usually used with a condition that makes the has_one select only one from the has_many collection), and it works fine
  • Loading branch information...
commit 382814278ca5a075785294a084138a8b2d9549ea 1 parent cb0c3e4
@willbryant authored
View
6 activerecord/lib/active_record/associations.rb
@@ -38,12 +38,6 @@ def initialize(owner_class_name, reflection, source_reflection)
end
end
- class HasOneThroughCantAssociateThroughCollection < ActiveRecordError #:nodoc:
- def initialize(owner_class_name, reflection, through_reflection)
- super("Cannot have a has_one :through association '#{owner_class_name}##{reflection.name}' where the :through association '#{owner_class_name}##{through_reflection.name}' is a collection. Specify a has_one or belongs_to association in the :through option instead.")
- end
- end
-
class HasManyThroughSourceAssociationNotFoundError < ActiveRecordError #:nodoc:
def initialize(reflection)
through_reflection = reflection.through_reflection
View
4 activerecord/lib/active_record/reflection.rb
@@ -525,10 +525,6 @@ def check_validity!
raise HasManyThroughAssociationPolymorphicSourceError.new(active_record.name, self, source_reflection)
end
- if macro == :has_one && through_reflection.collection?
- raise HasOneThroughCantAssociateThroughCollection.new(active_record.name, self, through_reflection)
- end
-
check_validity_of_inverse!
end
View
12 activerecord/test/cases/associations/has_one_through_associations_test.rb
@@ -28,6 +28,10 @@ def test_has_one_through_with_has_one
assert_equal clubs(:boring_club), @member.club
end
+ def test_has_one_through_with_has_many
+ assert_equal clubs(:moustache_club), @member.favourite_club
+ end
+
def test_creating_association_creates_through_record
new_member = Member.create(:name => "Chris")
new_member.club = Club.create(:name => "LRUG")
@@ -265,13 +269,7 @@ def test_has_one_through_with_primary_key_option
end
def test_has_one_through_with_default_scope_on_join_model
- assert_equal posts(:welcome).comments.order('id').first, authors(:david).comment_on_first_post
- end
-
- def test_has_one_through_many_raises_exception
- assert_raise(ActiveRecord::HasOneThroughCantAssociateThroughCollection) do
- members(:groucho).club_through_many
- end
+ assert_equal posts(:welcome).comments.order('id').first, authors(:david).comment_on_first_posts
end
def test_has_one_through_belongs_to_should_update_when_the_through_foreign_key_changes
View
4 activerecord/test/models/author.rb
@@ -28,9 +28,7 @@ def testing_proxy_target
has_many :first_posts
has_many :comments_on_first_posts, :through => :first_posts, :source => :comments, :order => 'posts.id desc, comments.id asc'
-
- has_one :first_post
- has_one :comment_on_first_post, :through => :first_post, :source => :comments, :order => 'posts.id desc, comments.id asc'
+ has_one :comment_on_first_posts, :through => :first_posts, :source => :comments, :order => 'posts.id desc, comments.id asc'
has_many :thinking_posts, :class_name => 'Post', :conditions => { :title => 'So I was thinking' }, :dependent => :delete_all
has_many :welcome_posts, :class_name => 'Post', :conditions => { :title => 'Welcome to the weblog' }
View
6 activerecord/test/models/member.rb
@@ -1,12 +1,12 @@
class Member < ActiveRecord::Base
has_one :current_membership
has_one :selected_membership
- has_one :membership
+ has_many :memberships
has_many :fellow_members, :through => :club, :source => :members
has_one :club, :through => :current_membership
has_one :selected_club, :through => :selected_membership, :source => :club
- has_one :favourite_club, :through => :membership, :conditions => ["memberships.favourite = ?", true], :source => :club
- has_one :hairy_club, :through => :membership, :conditions => {:clubs => {:name => "Moustache and Eyebrow Fancier Club"}}, :source => :club
+ has_one :favourite_club, :through => :memberships, :conditions => ["memberships.favourite = ?", true], :source => :club
+ has_one :hairy_club, :through => :memberships, :conditions => {:clubs => {:name => "Moustache and Eyebrow Fancier Club"}}, :source => :club
has_one :sponsor, :as => :sponsorable
has_one :sponsor_club, :through => :sponsor
has_one :member_detail
Please sign in to comment.
Something went wrong with that request. Please try again.