8

現在、生年月日が正しいかどうかを確認する機能があります。

  validates :birth_year, presence: true,
            format: {with: /(19|20)\d{2}/i }

日付が正しいかどうかを確認する関数もあります。

  validate :birth_year_format

  private

  def birth_year_format
    errors.add(:birth_year, "should be a four-digit year") unless (1900..Date.today.year).include?(birth_year.to_i)
  end

validates私が今持っている2つのバリデーションの代わりに、ボトムメソッドをトップに結合することは可能ですか?

4

3 に答える 3

14

次のようなことができるはずです。

validates :birth_year, 
  presence: true,
  inclusion: { in: 1900..Date.today.year },
  format: { 
    with: /(19|20)\d{2}/i, 
    message: "should be a four-digit year"
  }

見てみましょう: http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates

于 2012-09-26T23:26:00.810 に答える
4
:birth_year, presence: true,
             format: {
                       with: /(19|20)\d{2}/i 
                     }  
             numericality: { 
                             only_integer: true,
                             greater_than_or_equal_to: 1900,
                             less_than_or_equal_to: Date.today.year
                           }
于 2012-09-26T23:25:47.347 に答える
1

正規表現

   /\A(19|20)\d{2}\z/

1900 e 2099 の間の番号のみを許可します

\A - 文字列の開始

\z - 文字列の終わり

于 2014-09-25T16:43:26.030 に答える