2011-07-26 6 views
0

ユーザーはアメリカの書式設定された日付(mm/dd/yyyy)を入力します。モデルを保存すると、日付属性がnilに回す:アメリカの書式設定された日付文字列をDate変数に割り当てる方法を教えてください。

my_model.start_date = "07/30/2011" 

puts my_model.start_date 
nil 

私はコンソールでこれを行う場合、私は、無効な日付のエラーを取得:

Date.parse("07/30/2011") 

はどのようにアメリカの日付を受け入れるようにアプリを強制しませんフォーマット?私は、アプリケーションがローカリゼーションを正しく処理する必要があることを知っていますが、パッチは短期間に必要なものです。

答えて

3

私は同じことを行い宝石を発見し、あなたがしなければならないすべてはあなたの宝石のファイルでこれを入れている:

gem 'american_date' 

私はこれは古い記事の一種である知っているが、私はこれが役立つかもしれない考え出し他の人とは少し違ってサルのパッチよりも簡単です。

2

ずっと周りに掘った後、私はこの(gitのhttps://gist.github.com/922048にTroykにより投稿)見つけ

# Date.parse() with Ruby 1.9 is now defaulting to the European date style where the format is DD/MM/YYYY, not MM/DD/YYYY 
# patch it to use US format by default 
class Date 
    class << self 
    alias :euro_parse :_parse 
    def _parse(str,comp=false) 
     str = str.to_s.strip 
     if str == '' 
     nil 
     elsif str =~ /^(\d{1,2})[-\/](\d{1,2})[-\/](\d{2,4})/ 
     year,month,day = $3.to_i,$1,$2 
     date,*rest = str.split(' ') 
     year += (year < 35 ? 2000 : 1900) if year < 100 
     euro_parse("#{year}-#{month}-#{day} #{rest.join(' ')}",comp) 
     else 
     euro_parse(str,comp) 
     end 
    end 
    end 
end 

スティックこの設定/ initializiers/american_date_monkey_patch.rbで、あなたはすべてのセットです。

あなたのユーザーがすべてアメリカ人でない場合、この解決策はあなたのためではありません。

関連する問題