2012-03-20 13 views
0

Teacherのフィールドは:teacher_birthdayです。私は:teacher_birthdayを表示(単一のテキストボックス)から取得します。私は、入力日付がそのような形式 - dd.mm.yyyyを持っていることを確認したいと思います(この日付が間違っているため、12.24.1991という入力日付はdbに保存されません)。また、私はモデルでこれをやりたいこれは可能ですか?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日:Date'。また、私のページにアクセスし、私は 'NilClass'のための'未定義のメソッド '分割 'を取得した後、無効な日付を印刷しようとします: – ExiRe

+0

また、私は私のフォームで正しい日付を印刷するとき' 01 Dec 1991:Date' – ExiRe

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

+0

@ExR、私は慢性的にあなたの日付を解析し、それがゼロでないことを検証することを推奨します。これはあなたが求めていたものではありませんが、ユーザーに日付の入力方法の柔軟性を提供します。 – Mori

+0

私はそんなに必要なものに対しては良い解決策がないのは悪いです...コントローラを使用してエラーを追加するようです(とにかくこのような方法は嫌いです)。 – ExiRe