0

更新時に開始日が以前に保存された日付よりも前の日付であってはならないことを検証する方法。例:- 開始日が 2013 年 7 月 11 日のレコードを作成したように、更新時に 2013 年 7 月 11 日より前にすべきではありません。

ビューで:

f.input :start_date, as: :datepicker
f.input :end_date, as: :datepicker

モデル:

validates :start_date, allow_nil: true, date: { after: Date.today - 1, message: 'must be today or after today' }, on: :create
validates :end_date, allow_nil: true, date: { after: :start_date, message: 'must be after start date' }

ありがとう。

4

2 に答える 2

1

attr_accessor :previous_start_date (attr_accessible についても忘れないでください) を追加して、フォームに隠しフィールドを追加できます。このフィールドには、DB の start_date と同じ値が必要です。その後、:previous_start_date の後に使用できます。注: 値 previous_start_date は DB から設定する必要があります。getter メソッドのモデルで設定するか、before_validation コールバックで設定することをお勧めします。

于 2013-11-09T11:52:02.220 に答える
1

今はテストできませんが、うまくいくと思います:

validate :previous_start_date

def previous_start_date
  old_start_date = Model.find(self.id).start_date
  if(old_start_date > self.start_date)
   self.errors.add(:start_date, "Can't be previous than the initial date")
  end 
end

検証の時点では、オブジェクトはまだ保存されていないため、データベースからオブジェクトを取得すると、以前の値が得られると思います。手元にある値を使用して、現在の start_date と比較し、カスタム エラーを追加できます。

お役に立てば幸いです。

于 2013-11-08T12:17:49.243 に答える