[rspec-devel] [ rspec-Patches-6720 ] [PATCH] ActiveRecord has_many :through and has_and_belongs_to_many break 'should'

noreply at rubyforge.org noreply at rubyforge.org
Fri Nov 17 10:07:03 EST 2006


Patches item #6720, was opened at 2006-11-17 00:52
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=3151&aid=6720&group_id=797

Category: rails plugin
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Wilson Bilkovich (wilson)
Assigned to: Nobody (None)
Summary: [PATCH] ActiveRecord has_many :through and has_and_belongs_to_many break 'should'

Initial Comment:
Here's a stack trace (not mine, it's from aniero's app):
TypeError in 'An instance of a Report model should set the condition relationships based on the condition string on save'
wrong argument type Condition (expected Module)
../vendor/rails/activerecord/lib/active_record/base.rb:1235:in `method_missing'
../vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:110:in `method_missing'
../vendor/rails/activerecord/lib/active_record/base.rb:943:in `with_scope'
../vendor/rails/activerecord/lib/active_record/associations/has_many_through_association.rb:110:in `method_missing'
./spec/models/report_spec.rb:36

After some digging with bitsweat's assistance, it turns out that there are four different method_missing implementations in ActiveRecord that can be invoked when calling methods on associations.

1. AssociationProxy, for has_one and belongs_to
2. HasManyAssociation, for has_many
3. HasAndBelongsToManyAssociation, for habtm
4. HasManyThroughAssociation, for has_many through

AssociationProxy's method_missing is pretty simple, and doesn't need wrapping.
The others, however, make some decisions using respond_to?, etc, etc, and need RSpec to step in ahead of them.

This patch adds the other two necessary.

An example of where this currently fails is:
@record.has_many_association.include? fixtures(:something)

The 'rspec_on_rails' sample app doesn't include any habtm or hmt associations, so I couldn't write any specs to cover this.  It might be worth adding those, so we can catch this kind of fun.

----------------------------------------------------------------------

>Comment By: Wilson Bilkovich (wilson)
Date: 2006-11-17 10:07

Message:
OK. I will do that today. I guess it will need a couple of
new models.

----------------------------------------------------------------------

Comment By: David Chelimsky (dchelimsky)
Date: 2006-11-17 09:35

Message:
Would you like to patch the sample app so we have those specs? The sample app specs get run during the build, and serve as acceptance level tests.

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=3151&aid=6720&group_id=797


More information about the rspec-devel mailing list