日時値として送信するテキスト フィールドに文字列を挿入する js カレンダーを使用しています。問題があるかどうかはわかりませんが、今のところ SQLite を使用しています。
次のようにフォーマットを設定しています(イニシャライザで):
Time::DATE_FORMATS[:default] = '%m/%d/%Y %H:%M'
Time::DATE_FORMATS[:db] = '%m/%d/%Y %H:%M'
Rails が別の形式を使用して日付を検証しているように見えるため、これは機能しません。
たとえば、次のように設定した場合:
myobject.my_datetime = '06/30/2012 00:00'
最終的に null になります (ActiveRecord によって生成された SQL クエリ自体がそれを NULL に設定します)。12 以下の日に設定すると、日付の部分は正しくなります (ただし、生成された SQL クエリには、月の前日を含む文字列が表示されます。つまり、上記の例では、SQL クエリの文字列は '30 です) /06/2012 05:00:000000')。
ご覧のとおり、config.time_zone を東部時間に設定しているにもかかわらず、UTC(?) に 5 時間を追加しているようです。
動作は、コンソールからでもフォーム送信でも同じです。
私が欠けているものについて何か提案はありますか?
アップデート:
jdoeの提案に従ってこれを行うと:
myobject.my_datetime = Time.strptime('06/30/2012 08:00', '%m/%d/%Y %H:%M')
生成されたクエリは正しく表示されるようになりました (4 時間の差は無視されます)。
UPDATE "myjoin_table" SET "my_datetime" = '06/30/2012 04:00.000000' .....
そのようにしてデータベースに取り込まれます。
しかし、オブジェクトをリロードすると、AR オブジェクトの値は nil に初期化されます。
コントローラー アクションで文字列を 1 つずつ解析し、パラメーターを手動で update_attributes に設定するだけだと思います。これは必要以上に難しいです。