我的数据库中有一个触发器,它生成一个随机 id “BEFORE INSERT”。
对于测试中使用的 rails 固定装置,它们不会生成(触发器在数据库中,我检查过)。
为什么?
我的数据库中有一个触发器,它生成一个随机 id “BEFORE INSERT”。
对于测试中使用的 rails 固定装置,它们不会生成(触发器在数据库中,我检查过)。
为什么?
Rails 夹具不一定按照满足数据库约束的顺序加载,因此 Rails 的解决方案是在加载夹具时关闭它们。
例如,使用 postgresql,这里是 Rails 执行的一些 sql
(2.0ms) ALTER TABLE "admins" DISABLE TRIGGER ALL;ALTER TABLE "schema_migrations" DISABLE TRIGGER ALL;ALTER TABLE "events" DISABLE TRIGGER ALL;
... insert all of the things
(2.1ms) ALTER TABLE "admins" ENABLE TRIGGER ALL;ALTER TABLE "schema_migrations" ENABLE TRIGGER ALL;ALTER TABLE "events" ENABLE TRIGGER ALL;
没有办法使用固定装置并让它们在加载时触发数据库触发器。使用像https://github.com/thoughtbot/factory_girl这样的对象构建器将触发数据库触发器。
不过,在您的情况下,有一种更好的方法可以满足您的需要
alter table mytable add column random_column double precision DEFAULT random() NOT NULL
或者如果它是您想要随机化的特定主键列,则应该使用 uuids。
CREATE EXTENSION "uuid-ossp";
CREATE TABLE some_table (
id uuid PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(),
some_field character varying,
other_table_id uuid REFERENCES other_table (id) ON DELETE CASCADE NOT NULL
);