risposta

6

sto lavorando con Rails 3.0.7 in questo momento, e il tipo polimorfico è in corso di definizione in active_record-3.0.7/lib/active_record/association.rb, linea 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 

Così sembra che sta chiamando class_name.underscore e poi aggiungendo "_type" . Questo potrebbe essere leggermente diverso per le rotaie 3.1, ma questo dovrebbe essere un buon punto di partenza.

+2

E 'class_name' è definito come' @class_name || = options [: class_name] || derive_class_name' se non mi sbaglio. 'derive_class_name' è' name.to_s.camelize'. Quindi suppongo che stia chiamando Model.name.to_s.camelize, e dovrei sovrascrivere il metodo 'name'? – Robin

+0

Questo dovrebbe funzionare. –

+0

Ha funzionato :) Grazie – Robin

Problemi correlati