I'm working with Rails 3.0.7 right now, and the polymorphic type is being defined in active_record-3.0.7/lib/active_record/association.rb
, line 1773.
def create_belongs_to_reflection(association_id, options)
options.assert_valid_keys(valid_keys_for_belongs_to_association)
reflection = create_reflection(:belongs_to, association_id, options, self)
if options[:polymorphic]
reflection.options[:foreign_type] ||= reflection.class_name.underscore + "_type"
end
reflection
end
So it looks like it is calling class_name.underscore
and then appending "_type". This may be slightly different for rails 3.1, but this should be a good starting place.
class_name
is defined as@class_name ||= options[:class_name] || derive_class_name
if I'm not mistaken.derive_class_name
isname.to_s.camelize
. So I guess its just calling Model.name.to_s.camelize, and I should override thename
method? – Flutist