Предотвращение «наследования одной таблицы» в Rails / ActiveRecord и устаревшей схеме - PullRequest
6 голосов
/ 08 июля 2010

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

Rails будет "умно" предполагать, что всякий раз, когда в таблице есть столбец типа, он будет пытаться использовать наследование одной таблицы.

Есть ли способ избежать этого?

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

Ответы [ 2 ]

11 голосов
/ 08 июля 2010

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

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

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

class LegacyValue < ActiveRecord::Base
  set_inheritance_column 'does_not_have_one'
end
2 голосов
/ 03 июля 2014

В Rails 4 set_inheritance_column устарела и вместо него следует использовать self.inheritance_column:

class LegacyValue < ActiveRecord::Base
  self.inheritance_column = 'does_not_have_one'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...