Я сейчас работаю с Rails 3.0.7, и полиморфный тип определяется в active_record-3.0.7/lib/active_record/association.rb
, строка 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
Так что, похоже, он вызывает class_name.underscore
затем добавляя "_type".Это может немного отличаться для рельсов 3.1, но это должно быть хорошей отправной точкой.