Respuesta

6

estoy trabajando con rieles 3.0.7 en este momento, y el tipo polimórfico se está definiendo en active_record-3.0.7/lib/active_record/association.rb, línea 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 

Así que parece que se está llamando class_name.underscore y luego añadiendo "_type" . Esto puede ser ligeramente diferente para los rieles 3.1, pero este debería ser un buen punto de partida.

+2

Y 'class_name' se define como' @class_name || = options [: class_name] || derive_class_name' si no me equivoco. 'derive_class_name' es' name.to_s.camelize'. ¿Entonces supongo que solo está llamando a Model.name.to_s.camelize, y debería anular el método 'name'? – Robin

+0

Eso debería funcionar. –

+0

Sí :) Gracias – Robin

Cuestiones relacionadas