shimmyShow Webアプリ開発ブログ

プログラミングスクールTECH::CAMPを73期を卒業し、紙媒体で実施されている教育の根本を変えていくためのサービスを開発中。当ブログを読めば誰でも当該サービスを開発できるようにするため軌跡を記録中。

Ruby on Rails 外部キー制約カラムにNULL値を許可する方法

Ruby on Railsにおいて、カラムに外部キーを設定するとNULL値を登録することができない。外部キー制約を設定しつつ、NULL値を許可する方法を下記に示す。

 

現状

下記の場合、外部キー制約が設定されたカラムにNULL値は登録できない。

productテーブルのマイグレーションファイル

 カラム:product_brandを外部キーとして設定

     null :false の設定はしていない 

class CreateProducts < ActiveRecord::Migration[5.2]
def change
create_table :products do |t|
t.references :product_brand, foreign_key: true
t.timestamps
end
end
end

 

product モデル

class Product < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to :product_brand
end
 
上記状態の場合、productテーブルのカラムproduct_brandはNULL値を登録することができない。
 

修正

下記のようにoptional: trueを設定することでNULL値が登録できるようになる。
 
peoductモデル
 optional: true を設定するとproductテーブルのカラムproduct_brandにNULL値を登録することが可能となる。
class Product < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to :product_brand, optional: true
end