地方でリモートワーク

プログラミング、先物、fx,仮想通貨なんでもやります

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