環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16
状況
rails db:migrate
したとき、外部キーが文字列なのにreferences
で外部キーを定義しようとするとエラー
PG::DatatypeMismatch: ERROR: foreign key constraint "fk_rails_640ba59391" cannot be implemented
DETAIL: Key columns "user_id" and "id" are of incompatible types: bigint and character varying
db/migrate/2022090909090_create_posts.rb
def change
create_table :posts do |t|
t.references :user, null: false, foreign_key: true
t.string :title, null: false
t.text :content, null: false
t.timestamps
end
end
解決法:一般的な方法
add_foreign_key
で外部キーを設定する。
db/migrate/2022090909090_create_posts.rb
def change
create_table :posts do |t|
t.string :title, null: false
t.text :content, null: false
t.string :user_id, null: false
t.timestamps
end
add_foreign_key :posts, :users
end
解決法:便利な方法
references
にtype
を指定することで文字列の外部キーを定義できる。
db/migrate/2022090909090_create_posts.rb
def change
create_table :posts do |t|
t.references :company, null: false, foreign_key: true, type: :string
t.text :content, null: false
t.string :user_id, null: false
t.timestamps
end
end