Как работать с тестами и приспособлениями в базе данных с внешними ключами в Rails?
Я использую Rails 4.1 и PostgreSQL и использую гем иностранца для создания ограничений внешнего ключа. Но у меня есть некоторые проблемы со светильниками.
Когда я бегу:
spring rake test
Я получил ошибки, подобные следующим:
ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR: update or delete on table "pessoas" violates foreign key constraint "pacientes_pessoa_id_fk" on table "pacientes"
DETAIL: Key (id)=(980190962) is still referenced from table "pacientes".
: DELETE FROM "pessoas"
Я нашел обходной путь: воссоздание базы данных:
RAILS_ENV=test spring rake db:reset && spring rake test
Я получаю некоторые ошибки, когда пытаюсь заполнить базу данных разработки, используя rake db:fixture:load
,
Я уже пытался изменить порядок загрузки прибора в test_helper.rb
, но этого было недостаточно.
Кто-то знает, как это исправить? Я много искал в сети и не нашел решения.
1 ответ
Итак, я точно знаю, что это работает, хотя я не могу сказать, что это действительно правильная работа.
Вы должны сделать пользователя SUPERUSER.
В моем случае, используя Cloud 9, пользователь, вошедший в систему под именем "Ubuntu".
Я ввожу sudo -u postgres psql (фактически дважды для правильного доступа к C9) и набираю:
ALTER USER Ubuntu SUPERUSER;
Выйти, и это будет работать.
Если вы запустите tail log/test.rb, то при запуске интеграционного теста вы увидите PG::InsufficientPrivlege: ERROR, поэтому у пользователя недостаточно прав. Вы не хотели бы делать это в производстве, но мое производство на Heroku, так что я в порядке.