schema_plusを使うとcreate_table
やadd_column
でカラムを定義するときに:references
オプションにテーブル名を渡すだけで、外部キー制約を手軽にかけることができる。
create_table :posts do |t| t.integer :category_id, references: :categories end
個々に指定するのが面倒なときは、auto_create
を設定すれば名前が*_id
にマッチするカラムに対して自動的に外部キー制約をかけてくれる。
SchemaPlus.config.foreign_keys.auto_create = true
このときポリモーフィック関連を使っていると、カラム名が*_id
なんだけどそれに対応した(ARの規約から自動的に推測される)テーブルがない→テーブルの作成orカラムの追加ができないって現象が発生する。そんなときは:references
にnil
を指定してやればよい。
create_table :posts do |t| t.string :attachable_type t.integer :attachable_id, references: nil end
ちなみに前述したように:references
に具体的なテーブル名を与えることもできるけど、ポリモーフィック関連では対応するテーブルがひとつとは限らないのでその方法はあまり有効ではない。