2012-03-20 131 views
0

我有模型Teacher其中有字段:teacher_birthday。我從視圖中獲取:teacher_birthday(單個文本框)。我想確保一個輸入日期有這樣的格式 - dd.mm.yyyy(我的意思是我想確定輸入日期爲12.24.1991將不會保存在分貝,因爲這樣的日期是錯誤的),並且這個日期存在。另外,我想在MODEL中做到這一點。這可能嗎?Rails 3.2 - 驗證日期格式

回答

0

聲明要在模型中調用的驗證方法,然後定義此方法。以下應大致做你需要什麼:

validate :validate_teacher_birthday 

private 

def validate_teacher_birthday 
    errors.add("Teacher birthday", "is invalid.") unless (check_valid_date && valid_date_format) 
end 

def valid_date_format 
    self.teacher_birthday.match(/[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]/) 
end 

def check_valid_date 
    begin 
    parts = self.teacher_birthday.split(".") #contains array of the form [day,month,year] 
    Date.civil(parts[2].to_i,parts[1].to_i,parts[0].to_i) 
    rescue ArgumentError 
    #ArgumentError is thrown by the Date.civil method if the date is invalid 
    false 
    end 
end 
+0

我試試你的代碼之後,我得到了很多在rspec的錯誤,例如:'故障/錯誤:@ user.create_teacher( @attr_teacher) NoMethodError: 未定義的方法拆分爲星期三,1980年12月31日:日期。另外,當我訪問我的頁面,我嘗試打印無效的日期後提交我得到'未定義的方法'分裂爲零:NilClass' – ExiRe 2012-03-20 13:07:37

+0

此外,當我打印一個正確的日期在我的形式我得到:'未定義的方法分裂爲Sun, 1991年12月1日:日期' – ExiRe 2012-03-20 13:14:26

1

嘗試chronic寶石。它具有非常靈活的日期解析,包括你在找什麼:

[11] pry(main)> require 'chronic' 
=> true 
[12] pry(main)> Chronic.parse('24.12.1991'.gsub('.','-')) 
=> 1991-12-24 12:00:00 -0700 
+0

我該如何驗證我的日期?我不明白。我不知道如何獲取輸入字符串,然後在db中變成日期。 – ExiRe 2012-03-20 14:02:53

+0

@ExR,我建議用Chronic解析你的日期,然後驗證它不是零。這不是你要求的,但它爲用戶提供了更多的靈活性,以便如何輸入日期。 – Mori 2012-03-20 14:22:33

+0

對於我所需要的東西沒有很好的解決方案,這很糟糕......看起來我會使用控制器並在其中添加錯誤(無論如何,我討厭這樣的方法)。 – ExiRe 2012-03-20 15:03:46