Ruby on Rails Наследование одной таблицы (STI) и проблема модульного тестирования (с PostgreSQL)

StackOverflow https://stackoverflow.com/questions/646391

Вопрос

Я использую модель STI с единой таблицей "Учетные записи" для хранения информации для пользователей и технических специалистов (т.е.Пользователь < Учетная запись, Техник < Учетная запись).Все работает с функциональной точки зрения, но при запуске модульных тестов все взрывается:

...8) Ошибка:test_the_truth (пользовательский тест):ActiveRecord::Значение StatementInvalid:Ошибка PGError:ОШИБКА:отношения "технические специалисты" не существует :ИСКЛЮЧИТЬ ИЗ раздела "технические специалисты" ...

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

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

Это было полезно?

Решение

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

./тест/приспособления/технические специалисты.yml ./тест/приспособления/пользователи.yml

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

Другие советы

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

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

Если вам действительно нужно предварительно загрузить данные, вы должны использовать параметр parent models и установить в поле type правильное название модели.

  • Вы убедились, что в вашей таблице учетных записей есть столбец "тип"?Он вам нужен для того, чтобы заставить STI работать.
  • На самом деле у меня были некоторые проблемы с совместимостью базы данных со столбцом под названием "тип", и я иногда переключался на "вид", чтобы устранить это.Возможно, в этом и заключается проблема;попробуйте установить self.inheritance_column = "kind" в базовом классе (Account) и посмотрите, поможет ли это.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top