Rails 3验证问题

时间:2011-03-13 12:59:55

标签: ruby-on-rails ruby-on-rails-3 validation

在我的表单中,我希望用户以DD / MM / YYYY格式输入日期。我有验证检查。

问题是在数据库中它以YYYY-MM-DD格式存储,所以如果只是尝试更新is_money_paid字段:

job = Job.find(params[:id])
job.update_attributes(:is_money_paid => ...)

验证失败,表示作业的日期格式错误(YYYY-MM-DD而不是DD / MM / YYYY)。

解决这个问题的合适方法是什么?

以下是相关代码:

class Job < ActiveRecord::Base
  validate :job_date_validator
end

DATE_REGEX = /\A\d{2}\/\d{2}\/\d{4}\z/

def job_date_validator
  if job_date_before_type_cast.blank?
    errors.add(:job_date, "^Date must be selected")
  elsif job_date_before_type_cast !~ DATE_REGEX
    errors.add(:job_date, "^Date must be in DD/MM/YYYY format")
  end
end

is_money_paid是一个布尔字段。

3 个答案:

答案 0 :(得分:1)

我会更改验证器说:

validate_presence_of :job_date, :message => "must be selected"
validate :job_date_validator, :if => :job_date_changed?

或类似的东西。

你可以拿出.blank吗?检查一下。

答案 1 :(得分:0)

答案 2 :(得分:0)

我建议你看看gem validates_timeliness兼容rails 3。