Должны ли мы использовать синтаксис полиморфной миграции абстрактных рельсов? - PullRequest
0 голосов
/ 30 марта 2012

Существует два способа написания полиморфной миграции в Rails. В общем, я сделал это:

class CreateFeatures < ActiveRecord::Migration
  def change
    create_table :features do |t|
      t.integer  :featureable_id
      t.string   :featurable_type

      t.timestamps
    end
  end
end

Однако мы также можем сделать это:

class CreateFeatures < ActiveRecord::Migration
  def change
    create_table :features do |t|
      t.references  :featureable, :polymorphic => true

      t.timestamps
    end
  end
end

Эти два, для всех практических целей, идентичны. Мой вопрос: Один лучше другого? Лучше ли для будущей ремонтопригодности?

Это, вероятно, будет проблемой, только если одна из двух вещей изменилась:

  1. Версия полиморфной абстракции (версия # 2) исчезнет или синтаксис изменится
  2. Метод работы полиморфных отношений (с использованием идентификатора и типа) меняется - маловероятно

Просто интересно, есть ли предпочтение, или это "Мех, на самом деле не имеет значения в любом случае"

1 Ответ

0 голосов
/ 30 марта 2012

Для приложения all rails, где вы генерируете все таблицы с помощью миграций, функционально нет никакой разницы.

Вот код для ссылок:

def references(*args)
  options = args.extract_options!
  polymorphic = options.delete(:polymorphic)
  args.each do |col|
    @base.add_column(@table_name, "#{col}_id", :integer, options)
    @base.add_column(@table_name, "#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) unless polymorphic.nil?
  end
end

Это все хорошо, но если ваши внешние ключи в ссылочной таблице не являются _id, единственный способ - единственный метод.

ссылки просто экономят одну строку кода ...

...