2011-05-02 83 views
0

我正在为此类项目工作,其中一个要求是“对日期字段类型进行验证”。Ruby on Rails日期字段验证

例如,我所做的:

rails g scaffold Tasks id:primary_key description:string due:date 

我会添加到模型什么,所以我可以确认的日期?

我试过多个不同的“解决方案”,似乎没有任何工作。

回答

4

在您的模型中,您可以定义自定义方法来处理您的验证。

class Task < ActiveRecord::Base 
    validate :check_due_date 


    def check_due_date 
    # You can now check the "due" field here. For example, if you only want to allow due 
    # dates today and later: 

    if due < Date.today 
     errors.add(:due, "can only be today or later.") 
    end 
    end 
end 
+2

@Chuck:我不同意。如果你使用before_save,那么'task.valid?'可以返回true,即使它没有。在'validate'和'before_save'之间执行的唯一钩子是'after_validation',所以除非日期被'after_validation'方法混淆了,否则我不会担心。 – 2011-05-02 17:38:19

1

您可以使用简单的“及时验证”插件:https://github.com/adzap/validates_timeliness/

然后使用以下语法:

class Task < ActiveRecord::Base 
    validates_date :due 
end 

除非插件是不允许的,在这种情况下,对方的回答(创建你自己的验证器)会更合适。