validateがテーブル定義の制約で違って嵌った

photo credit: Andrew* via photopin cc

経緯

以下のようにModelのvalidateとテーブル定義での制約で異なっているサービスを改修しようとし、少し嵌った。

  • days列
    • validates:validates :days, presence: true ←空だとエラー
    • テーブル定義:”days” integer, ←NOT NULL条件がついていない
  • user_id列
    • validates:validates :user_id, presence: true ←空だとエラー
    • テーブル定義:”user_id” integer, ←NOT NULL条件がついていない

原因

もともとnullを許容していて、実データにもnullが入っている。途中で、nullはよくないねーということで、validatesだけつけたから“故意”にvalidateがテーブル定義をズレているらしい。

まとめ

“故意”にズラしているとのことなので、このままにしておいた