Как Rails заполняет поле «model_type» для полиморфных ассоциаций? - PullRequest
5 голосов
/ 02 декабря 2011

У меня есть модель деятельности. Это belongs_to :parent, :polymorphic => true.

Использует ли Rails parent.class.name, parent.model_name или что-то еще для заполнения поля parent_type?

Я хочу, чтобы Presenter вел себя как родительский объект, который он переносит, и мне нужно переопределить правильный метод.

Спасибо.

1 Ответ

6 голосов
/ 02 декабря 2011

Я сейчас работаю с 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, но это должно быть хорошей отправной точкой.

...