Предотвращение “Единственного Наследования Таблицы” в Rails/ActiveRecord и Схеме Прежней версии

Я пытаюсь интегрироваться с таблицей Legacy, которая имеет столбец, названный "типом".

Направляющие "энергично" предположат, что каждый раз, когда у нас есть столбец 'типа' в таблице, затем это попытается использовать Единственное Наследование Таблицы.

Там должен так или иначе избежать этого?

(Я не могу переименовать столбец).

6
задан Mike Woodhouse 8 July 2010 в 09:23
поделиться

1 ответ

Ну, большая часть типа, который он действительно умный - соглашение над конфигурацией имеет некоторые очень реальные преимущества. ;-)

Там, где соглашение не работает, как в вашем случае, есть (вероятно - по крайней мере, я всегда находил его до сих пор...) способ обойти его. Для устаревших схем есть несколько возможностей, которые сразу приходят на ум.

  • Создайте в устаревшей базе данных представление с одной таблицей, которое переназначает столбцы, чтобы избежать обычных имен дополненной реальности. Не очень полезен, если у вас нет разрешений CREATE VIEW в БД, конечно, или если у вашей БД нет представлений;
  • Переопределите использование :type в качестве индикатора STI, используя set_inheritance_column, таким образом

class LegacyValue < ActiveRecord::Base
  set_inheritance_column 'does_not_have_one'
end
11
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: