Rails 中的日期验证

发布于 2024-11-01 11:28:30 字数 146 浏览 2 评论 0原文

我有一个包含两个属性的 Active Record 模型:start_date 和 end_date。我该如何验证以下内容:

  1. 日期采用正确的 (yyyy-mm-dd) 格式
  2. end_date > >开始日期

I have an Active Record model that contains two attributes: start_date and end_date. How do I go about validating the following:

  1. The dates are in the correct (yyyy-mm-dd) format
  2. That end_date > start_date

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你如我软肋 2024-11-08 11:28:30

它们以什么格式存储有关系吗?日期对象是日期对象。您是否将其存储在数据库的日期列中?

以下是我进行验证的方法:

class MyModel < ActiveRecord::Base
  validate :validate_end_date_before_start_date

  def validate_end_date_before_start_date
    if end_date && start_date
      errors.add(:end_date, "Put error text here") if end_date < start_date
    end
  end
end

请记住,这不会检查零日期......如果可以的话,您可能会想要。

仅供参考,如果您希望能够接受多种格式,Chronic 非常灵活。

Does it matter what format they are stored in? A Date object is a Date object. Are you storing it in a date column in the DB?

Here is how I do the validation:

class MyModel < ActiveRecord::Base
  validate :validate_end_date_before_start_date

  def validate_end_date_before_start_date
    if end_date && start_date
      errors.add(:end_date, "Put error text here") if end_date < start_date
    end
  end
end

Keep in mind this does not check for nil dates... you might want to if either could be.

FYI, if you want to be able to accept a variety of formats Chronic is pretty flexible.

夏末的微笑 2024-11-08 11:28:30

以下是如何进行日期验证:

如何验证Rails 中的日期?

并且查看一个日期是否大于另一个日期,您可以在日期对象上使用大于/小于运算符:

ruby-1.9.2-p136 :006 > d1 = Date.civil(2011, 05, 01)
 => #<Date: 2011-05-01 (4911365/2,0,2299161)> 
ruby-1.9.2-p136 :007 > d2 = Date.civil(2011, 01, 01)
 => #<Date: 2011-01-01 (4911125/2,0,2299161)> 
ruby-1.9.2-p136 :008 > d2 > d1
 => false 
ruby-1.9.2-p136 :009 > d2 < d1
 => true 

因此在您的示例中:

def validate_dates
  errors.add("Created at date", "is invalid.") unless convert_created_at
  errors.add("End Date" , "is invalid") if end_date > start_date
end

Here is how to do date validation:

How do I validate a date in rails?

And seeing if a date is greater than another date, you can just use the greater than/less than operators on date objects:

ruby-1.9.2-p136 :006 > d1 = Date.civil(2011, 05, 01)
 => #<Date: 2011-05-01 (4911365/2,0,2299161)> 
ruby-1.9.2-p136 :007 > d2 = Date.civil(2011, 01, 01)
 => #<Date: 2011-01-01 (4911125/2,0,2299161)> 
ruby-1.9.2-p136 :008 > d2 > d1
 => false 
ruby-1.9.2-p136 :009 > d2 < d1
 => true 

So in your example:

def validate_dates
  errors.add("Created at date", "is invalid.") unless convert_created_at
  errors.add("End Date" , "is invalid") if end_date > start_date
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文