Third time’s the charm. Thanks to Xardion and Agile’s efforts, more bugs were discovered in double polymorphism. But new tests that failed now work, so I think it is safe to say that the feature is complete.
api change
There is a tiny API change if you use the :rename_individual_collections
option. For example:
class Dog < ActiveRecord::Base
has_many_polymorphs :bones,
:from => [:real, :rawhide, :rubber],
:rename_individual_collections => true
end
The parents (dogs) can now be accessed from the children (bones) via .dogs_of_bones
. This is to avoid a conflict with .bones_dogs
, which is the default name for the join records themselves.
new debugging facility
If you glance at the beginning of the lib/has_many_polymorphs.rb
source, you will see instructions for making the plugin generate real Ruby code explaining all of the ActiveRecord relationships set up. This is for debugging purposes.
You can’t use the code directly because it doesn’t include any of the special methods defined here and there. But it’s great for understanding what has_many_polymorphs
is doing to your model relationships.
Or, you can use it just to see what a ridiculous number of associations have to get set up to make everything work. The test fixtures generate 68 ActiveRecord associations (as well as 16 plugin associations).