2012-02-03 5 views
3

大きな慣習を使用していない従来のデータベースで作業していますが、スキーマRails/Active Record "ArgumentError:引数が範囲外です" - "time"フィールドが24時間を超えています

いくつかの時間フィールドでは、値が33:06:46のように24時間を超えることがあります。これは私に与える:ArgumentError: argument out of range

この質問はbeforeを頼まれましたが、それは満足のいく答えを持っていませんでした。質問者は最終的に、私が避けたいものであるDataMapperを使用していると言いました。

これをキャッチするためのアイデアはありますか?実際のスキーマを変更せずに、Timeフィールドの代わりにRailsにDate-Timeフィールドとして扱わせることができますか?

ありがとうございます!

Thariq

答えて

1

わからない、それはしかし、最善の方法です:?。?。?

ActiveRecordのは、このような値を解析するためにactivesupportの:: TimeZone.parseメソッドを使用しています(宝石/ activesupportの -/libに/ active_support /値/ time_zone.rb)

それは非常に簡単です:

def parse(str, now=now) 
    date_parts = Date._parse(str) 
    return if date_parts.blank? 
    time = Time.parse(str, now) rescue DateTime.parse(str) 
    if date_parts[:offset].nil? 
    ActiveSupport::TimeWithZone.new(nil, self, time) 
    else 
    time.in_time_zone(self) 
    end 
end 

だから、あなたの時間形式

0123のために、この方法にパッチを適用でき
+0

興味深い。どうすればその機能を無効にできますか? –

+0

モンキーパッチの方法は、/ libフォルダにactive_support/time_zone.rb(yap、サブフォルダを含む)ファイルを追加して、ここで定義します。ActiveSupport :: TimeZoneクラスをオーバーライドした解析メソッド – icanhazbroccoli

+0

ああ、恐ろしいです。 –

関連する問題