2015-06-05 54 views
0

custom_form.html.erb扶手:date_select验证

<%= f.date_select :creation_date %> 

我在和date型数据库中有一个列creation_date。一切工作正常,但我需要在我的server.rb模型中验证:creation_date
我需要验证:

  1. 日期类型是有效的
  2. 最大\分钟日期开始\期末

简单:creation_date验证validates_date :creation_date, presence =>true ...调用Undefined Method错误。
我在论坛上看到,如果日期无效,那么我的:creation_date将被设置为nil

我想我们可以检查:creation_datenil值来处理列表中的1项?

我该如何执行第二项?

UPD(解决):

问题已在neasted模型。我试图验证我的用户模型的属性server.rb。我搬到验证,user.rb,现在我能够验证:creation_datetimeliness gem

+1

使用'presence:true' .. –

+0

检查这个http://stackoverflow.com/questions/597328/how-do-i-validate-a-date-in-rails –

+0

因为如果它是无效的,那么它将被设置为零,并且存在将是错误的?我对吗?那么我的列表中的第二项呢? – Src

回答

2

试试这个:

class MyModel < ActiveRecord::Base 
    validate :mydate_is_date 

    private 

    def mydate_is_date 
    unless :mydate.is_a?(Date) 
     errors.add(:mydate, 'must be a valid date') 
    end 
    end 
end 
0

验证:CREATION_DATE,存在:真

这方法来自默认的rails验证,如果它是日期字段,它将检查空白值或无效日期。

0

关于您的第一个项目,您已经得到了一些完全可以接受的答案(我将亲自实施G.B.'s)。

关于你的第二项,它取决于你的界限是什么。在我看来,最简单的方法是简单地比较日期对象。例如:

validate :mydate_is_within_range 

private 

def mydate_is_within_range 
    unless mydate > min_date && mydate < max_date 
    errors.add(:mydate, 'date must be within the allowed range') 
    end 
end 

现在,这依赖于具有日期格式的最小和最大的日期,但我怀疑已经有了吗?无论如何,它应该让你走上正轨。