【Rails】belongs_toで紐付けたモデルの存在チェック
belongs_to
で紐付けたモデルが本当にデータとして存在するかどうかをチェックする。
class Blog has_many :comments end
class Comment belongs_to :blog end
例えば、このようなモデルがあった時、Blogモデル経由でCommentを作成した場合は、すでにBlogは存在しているので、comment.blog_id
には確実に存在しているBlogのIDが入ります。
Blog.first.comments.create # 存在しているブログからコメントを作成する
ですが、Blogモデル経由ではなくCommentを直接作成するとき、Blogと紐付けるためにはBlogのIDを外側から指定しないといけません。
Comment.create(blog_id: 1) # コメントの作成時にblog_idを指定する
この方法で作成する時、特に設定しないままだと存在しないBlogのIDも指定できてしまいます。
Comment.create(blog_id: 999) # IDが999のBlogは存在しないが、Commentは作成できてしまう
参照先の指定したIDのデータが存在しない場合にエラーを投げるにはValidateを設定する必要があります。
class Comment belongs_to :blog validates_presence_of :blog end
validates_presence_of
で対象を指定すれば、参照先のデータが存在しない場合はエラーになり、データは作成されなくなります。