Matthewの備忘録

忘れたときはここを見ろ。何か書いてある。

RoRでDBテーブルのカラムと一致しない項目がある入力フォームを実現する その4

 記しておかなくてもよいとおもったが、バリデーションは次のように書けることは記しておこう:

class AddressBook < ApplicationRecord
  validates :address, presence: true,
    length: { maximum: 10,
      message: "区切り記号の半角空白も含めて10文字以内にしてください。" }

  def add_form_attributes
    self.singleton_class.class_eval{
      attr_accessor :state, :city, :street
      validates :state,  presence: true
      validates :city,   presence: true
      validates :street, presence: true, length: { maximum: 3 }
    }
  end

  # 省略

end

 上記は町名字番地等を入力してもらうstreetを3文字まで、そして全体を半角空白で繋げた文字数を10文字まで入力可能としている。入力する文字の長さを変えて、幾つかのエラーパターンを発生させられるが、きちんと処理した順序でエラーがスタックされていることが確認できるだろう。