データベースに、ランダムID「BEFOREINSERT」を生成するトリガーがあります。
テストで使用されたレールフィクスチャの場合、それらは生成されません(トリガーはデータベースにあります、私はそれをチェックしました)。
どうして?
データベースに、ランダムID「BEFOREINSERT」を生成するトリガーがあります。
テストで使用されたレールフィクスチャの場合、それらは生成されません(トリガーはデータベースにあります、私はそれをチェックしました)。
どうして?
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;
フィクスチャを使用してロード時に db トリガーをトリガーする方法はありません。https://github.com/thoughtbot/factory_girlのようなオブジェクト ビルダーを使用すると、 db トリガーがトリガーされます。
ただし、あなたの場合、必要なことを行うためのより良い方法があります
alter table mytable add column random_column double precision DEFAULT random() NOT NULL
または、特にランダム化する主キー列である場合は、uuid を使用する必要があります。
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
);