Rails5でアソシエーション時の注意(Rails5でSTI(単一継承テーブル)を行う)

Rails5でアソシエーション時の注意です。

STIの演習時に詰まった

ruby-rails.hatenadiary.com

いつもお世話になってるこのサイトの通りやったのですが、エラーが出てしまいました。
computerを作成しようとしても、「author must exit」とエラーが出て作成できません。

どうやらRails5で追加された機能のようです。

# Require `belongs_to` associations by default. Previous versions had false.
Rails.application.config.active_record.belongs_to_required_by_default = true

外部キーのnullを許容してくれないのがdefaultの設定になったみたいです。

これを外すには

class Product < ApplicationRecord
belongs_to :cpu, optional: true
belongs_to :maker, optional: true
belongs_to :author, optional: true
# validates :cpu_id, length: { minimum: 1 }, allow_nil: true
# validates :maker_id, length: { minimum: 1 }, allow_nil: true
# validates :author_id, length: { minimum: 1 }, allow_nil: true
validates :name, presence: true
validates :price, presence: true
validates :type, presence: true
end

optional: trueをつければいけます。
モデルクラスに各々のvalidationをつければこれでも問題ないです。
例えばcomputerクラスなら以下のような感じですね!

# models/computer.rb
class Computer < Product
validates :cpu_id, presence: true
validates :maker_id, presence: true
end

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA