這是我的模型類:如何一起使用默認和自定義驗證器?如何定義他們的訂單?
class Availability < ActiveRecord::Base
attr_accessible :beginning_date, :end_date
validates :beginning_date, :end_date :presence => true
# custom validators
validate :dates_cant_be_in_the_past
def dates_cant_be_in_the_past
if Date.parse(beginning_date) < Date.today
errors.add(:beginning_date, "cant be in the past")
end
if Date.parse(end_date) < Date.today
errors.add(:end_date, "cant be in the past")
end
end
end
現在兩件事情應該發生:首先驗證beginning_date
和end_date
屬性的存在和運行比我dates_cant_be_in_the_past
驗證。 可悲的是這種方法不起作用。如果我將字段留空,Date.parse
方法會拋出異常,因爲參數顯然是空的。
是否可以定義默認和自定義驗證的順序?還是我要實現的存在驗證自己,所以我會做這樣的事情:
validate :dates_cant_be_blank, :dates_cant_be_in_the_past
的guide至少說:
您可以通過一個以上的符號爲每個類方法和相應的驗證將按照他們的註冊順序執行。
class DateValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) if Date.parse(value) < Date.today record.errors.add(attribute, "cant be in the past") end end end
而在你的模型,你會使用這樣的:
class Availability < ActiveRecord::Base attr_accessible :beginning_date, :end_date validates :beginning_date, :end_date :presence => true validates :beginning_date, :end_date, :date => true, :allow_blank => true end
的
預先感謝
您的解決方案工作得很好。謝謝。另一個問題:是否可以將我的開始日期和結束日期與您的方法進行比較?我想確保開始日期在結束日期之前發生。 – 2013-04-07 15:11:43
你可以使用相同的驗證器並在其中添加代碼或創建一個新的代碼。 – 2013-04-07 20:48:40