在我的表单中,我希望用户以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
是一个布尔字段。
答案 0 :(得分:1)
我会更改验证器说:
validate_presence_of :job_date, :message => "must be selected"
validate :job_date_validator, :if => :job_date_changed?
或类似的东西。
你可以拿出.blank吗?检查一下。
答案 1 :(得分:0)
将其格式化为before_validation
http://guides.rubyonrails.org/active_record_validations_callbacks.html#updating-an-object
答案 2 :(得分:0)
我建议你看看gem validates_timeliness兼容rails 3。