12

締め切りが理にかなっているように、ActiveRecordでカスタムバリデーターを書いています:

  validate :deadline_is_possible?

  def deadline_is_possible?
    if deadline > begins_at
      errors.add(:deadline, 'must be possible')
    end
  end

ただし、これにより、「NoMethodError: nil:NilClass の未定義メソッド `>'」が生成されます。次のように、日付を文字列に変換しようとしました。

  def deadline_is_possible?
    if deadline.to_s > begins_at.to_s
      errors.add(:deadline, 'must be possible')
    end
  end

エラーは発生しませんが、機能しません。

他のバリデータも宣言しました(

  def begins_at_is_date?
    if !begins_at.is_a?(Date)
      errors.add(:begins_at, 'must be a date')
    end
  end

それはOKです。

4

2 に答える 2

9

日付の 1 つが nil の場合は、おそらく処理する必要があります。これらを期限データベースでデフォルト値に設定するか、次のようにすることができます。

  validate :deadline_is_possible?

  def deadline_is_possible?
    return if [deadline.blank?, begins_at.blank?].any?
    if deadline > begins_at
      errors.add(:deadline, 'must be possible')
    end
  end
于 2012-05-18T16:34:29.230 に答える