我正在使用Rails 3.0.3,我有相当广泛的验证过程。
我想进行验证,检查某个变量是否是正确的日期
基本上我要做的就是:
def validate_date(this_date)?
begin
Date.parse(this_date)
rescue
proper_date = false
else
proper_date = true
end
end
并使用以下方法在我的模型中调用此方法:
attr_accessor :given_date
validate_date(given_date)
但也在我的验证文件中的另一个地方使用,例如:
attr_accessor :another_date
validate_date(another_date)
或类似的......
我需要做些什么来完成这项工作?
答案 0 :(得分:3)
你想添加错误而不是返回false,所以你要使用:
errors.add(:date, "is invalid")
答案 1 :(得分:1)
我的意见是你不应该首先这样做。验证针对模型的属性,而不是针对验证方法的任何输入参数。 执行以下操作:
def validate_date
begin
Date.parse(this_date)
rescue
errors[:date_attribute] << 'is invalid date'
end
end
上面的代码假设您date_attribute
中有一个属性Model
。相应地改变。
答案 2 :(得分:1)
你应该做的是类似于nkm的回答:
validates :name,
presence => true # or other standard validations
validate :valid_my_date_variable
def valid_my_date_variable
if my_date_variable.present?
errors[:my_date_variable] << "is not valid" unless valid_date(my_date_variable)
end
end
def validate_date(this_date)?
begin
Date.parse(this_date)
rescue
proper_date = false
else
proper_date = true
end
end
或者您可以为您的日期创建验证器,并在使用标准验证器时使用它。
如果您希望保持模型清洁,请参阅documentation有关如何创建自定义验证器的信息。
答案 3 :(得分:0)
假设this_date是我们需要验证的属性(column_name),我们可以执行以下操作,
validate :validate_date
def validate_date
begin
Date.parse(this_date)
rescue
errors.add(:this_date, "is not valid")
end
end