2011-05-02 128 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 

除非插件是不允許的,在這種情況下,對方的回答(創建你自己的驗證器)會更合適。