Rails:使用参数进行验证

时间:2011-10-29 11:57:45

标签: ruby-on-rails validation date

我正在使用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)

或类似的......

我需要做些什么来完成这项工作?

4 个答案:

答案 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

参考:http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-a-symbol-with-if-and-unless