Techioz Blog

ポリモーフィック アソシエーション レール : 異なるprimary_keysタイプ(idとuuid)

概要

ポリモーフィックテーブルを定義したいと思います。私の問題は、一方のテーブルのprimary_keyがuuid(string)型で、もう一方のid(integer)型であることです。 おそらくmodel_typeに応じてmodel_able_idとmodel_able_uuidが異なるのではないかと思いましたが、それを理解できず、おそらくポリモーフィックのアクティブレコード機能が大量に壊れるでしょう。

他に STI を使用することを考えたこともありますが、まだ混乱しています。もちろん、ID を UUID に移行すれば解決するでしょう (しかし、私はそうしません)。

解決策

オプションで (ポリモーフィック) 外部キーのタイプを指定します。必要に応じて、:string を :uuid に変更します。

create_table :table_name do |t|
  t.references :target, type: :string, polymorphic: true, null: false
end

この場合、文字列と整数の両方の target_id が受け入れられます。

API ドキュメントを確認してください。