私はActiveRecordで多型モデルを作ろうとしています。任意のタイプの別のオブジェクトと1対1の関係を持つ必要があります。私はUnderstanding Polymorphic Associations in Rails LaunchSchoolのブログ記事に従っています。なぜ、ActiveRecordは新しいテーブルで不要な外部キー制約を作成しますか?
私の移行:私はadd_foreign_key
を呼び出すない午前
# Expresses an explanation for an action or event
class CreateReasons < ActiveRecord::Migration
def change
create_table :reasons do |t|
t.string :description
t.integer :event_id
t.string :event_type
t.timestamps
end
end
end
注意。
私のモデルクラス:
# Expresses an explanation for an action or event
class Reason < ActiveRecord::Base
belongs_to :event, polymorphic: true
end
私はこの行を削除した場合、同じエラーが発生します。この制約がどこから来た
D, [2016-04-05T22:40:41.389615 #45464] DEBUG -- : (9.7ms) CREATE TABLE "reasons" ("id" serial primary key, "description" character varying(255), "event_id" integer, "event_type" character varying(255), "created_at" timestamp, "updated_at" timestamp, CONSTRAINT fk_reasons_event_id FOREIGN KEY ("event_id") REFERENCES "events" ("id"))
E, [2016-04-05T22:40:41.390720 #45464] ERROR -- : PG::Error: ERROR: relation "events" does not exist
: CREATE TABLE "reasons" ("id" serial primary key, "description" character varying(255), "event_id" integer, "event_type" character varying(255), "created_at" timestamp, "updated_at" timestamp, CONSTRAINT fk_reasons_event_id FOREIGN KEY ("event_id") REFERENCES "events" ("id"))
D, [2016-04-05T22:40:41.391245 #45464] DEBUG -- : (0.2ms) ROLLBACK
は、私にはわからない、と私ドン:私は(またはbundle exec
なし)rake db:migrate
を実行すると
、私はエラーを取得し、私があるため、外部キー制約を考えますこの関係は多型でなければならないと思う(event
の関係はどのタイプでもよい)。それはなぜそこにあるのですか?私は何を間違えたのですか?
あなたはRails 5にいますか? – spickermann
FYI:私はたくさんの掘り出しを行い、fk制約の暗黙的/自動的な追加がないと確信しています。私は命名規則が続いているかもしれないと思ったが、私はそのようなものは見つけていない。 https://robith.rakuten.co.jp/references-integrity-with-foreign-keys https://github.com/rails/rails/pull/15606にリンクしています。暗黙的なfkについては何もありません。また、[rails 5 activerecord changelog](https://github.com/rails/rails/blob/v5.0.0.beta1/activerecord/CHANGELOG.md)には暗黙的なfkについては何もありません。だから私はそれが本当ではないと確信しています。 – alexanderbird
@alexanderbird +1。 ARはevent_idを参照と推測し、魔法のように外部キー制約を追加しているようです。私はそのコンベンションのものが爆発するのだろうかと思います。 (イベントは単数である) – Shishir