LoginSignup
2
1

More than 3 years have passed since last update.

外部キー設定をしたモデルに対してpresenceのバリデーションは不要と知った話

Posted at

概要

アソシエーションを組んだモデルを一度に登録する際に、不要なバリデーションを組んでいたために、エラーメッセージが二重に表示された。

結論

rails5からは、belongs_to: で外部キーに設定している場合は自動でnilは許可しないバリデーションが設定されるので、バリデーションの記述は不要。

詳細

商品出品機能を実装していた際に、バリデーションによって登録ができなかった時にエラーメッセージを表示するよう実装を行っていました。
itemモデル(商品)にimageモデルとcategoryモデルをassociationを組んで、同時に登録を行えるようにしていました。

  1. gem rails-i18nをinstall
  2. エラーメッセージを日本語翻訳

すると、エラーメッセージが表示されたのは良かったのですが、
Image from Gyazo

カテゴリーのエラーメッセージが2つある。。。

自分なりに仮説を立ててメンターへ質問。
Image from Gyazo

原因は最終行のvalidate :category_idでした。
__belongs_to:__で外部キーとして設定しているモデルに対してはバリデーションは不要とのこと。

後々自分で調べてみると、rails5からは外部キーに設定すると自動でnilは許可しないバリデーションが設定されるとのこと。
(参照:https://pikawaka.com/rails/validation)

今まで考えたこともなかったけど、当たり前、、、?なのか??
頭がこんがらがってきた、、、。

今まで複数のモデルを一度に登録させることがなかったため、今回初めてこのような問題に直面したと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1