「Ruby」カテゴリーのロゴ

【Rails】Validation failed ... must existというエラーの解決法

困ったこと

class User < ApplicationRecord
  has_many :posts, dependent: :destroy
end
class Post < ApplicationRecord
  belongs_to :user
end

Railsにて、1対多の関係にあるUserモデルとPostモデルのクラスを作っていた。

ActiveRecord::RecordInvalid (Validation failed: Lost must exist):

すると上のようなエラーが出た。

解決法

 class Post < ApplicationRecord
-   belongs_to :user
+   belongs_to :user, optional: true
 end

関連付けメソッドの引数にoptional: trueを記述する。

原因

class User < ApplicationRecord
  has_many :posts, dependent: :destroy
end
class Post < ApplicationRecord
  belongs_to :user, optional: true
end

先ほど例として挙げたモデルクラスの場合、Postテーブルの外部キーであるuser_idというカラムは、自動でNOT NULLになる。

そこでoptional: trueを指定し、その外部キーをnullableにしてあげることでバリデーションに引っかからなくなる。