Проблема наследования отдельных таблиц в Ruby on Rails (STI) и модульного тестирования (с PostgreSQL) - PullRequest
5 голосов
/ 14 марта 2009

Я использую модель STI с одной таблицей «Счета» для хранения информации для пользователей и технических специалистов (т. Е. Пользователь <учетная запись, техник <учетная запись). Все работает с функциональной точки зрения, но при запуске модульных тестов все взрывается: </p>

... 8) Ошибка: test_the_truth (UserTest): ActiveRecord :: StatementInvalid: PGError: ОШИБКА: отношения "техников" не существует : УДАЛИТЬ ИЗ "ТЕХНИКОВ" ...

По сути, стандартная структура не признает, что таблицы «Техники и пользователи» (или «отношения», как их называет PostgreSQL) не существуют и, фактически, должны быть псевдонимами для учетных записей.

Есть идеи? Я относительно новичок в RoR, и я в растерянности, как это исправить, не вырывая STI все вместе.

Ответы [ 3 ]

12 голосов
/ 15 марта 2009

Оказывается, что проблема была из-за наличия:

. / Тест / приборы / technicians.yml ./test/fixtures/users.yml

Это имеет смысл, так как ожидается, что среда сможет вставлять данные в таблицы с одинаковыми именами.

2 голосов
/ 26 апреля 2010

У меня была похожая проблема, которая была решена путем удаления файла YAML для дочерней модели. По сути, rails просматривает приборы, созданные в / test / fixtures /, и пытается очистить таблицы для каждого из них, чтобы он мог перезагрузить их для вас.

В моем случае я выполнил команду script / generate model, которая автоматически создает новый прибор. Затем я изменил модель для наследования от соответствующего родительского класса. Что ж, поскольку прибор все еще существует, рельсы пытались УДАЛИТЬ ОТ ДЕТИ, прежде чем загружать приборы.

Если вам действительно нужно предварительно загрузить данные, вам следует использовать прибор родительских моделей и установить в поле типа правильное имя модели.

0 голосов
/ 14 марта 2009
  • Вы удостоверились, что ваша таблица счетов содержит столбец типа? Вам нужен один, чтобы заставить работать ИППП.
  • У меня действительно были некоторые проблемы с совместимостью базы данных со столбцом с именем "type", и я иногда переключался на "kind", чтобы облегчить это. Это может быть проблемой; попробуйте установить self.inheritance_column = "kind" в базовом классе (Account) и посмотрите, поможет ли это.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...