つくづく謎のdatetime。

相変わらずどーにも動いてくれない部分です。
datetime型にした変数…

class CreateOrders < ActiveRecord::Migration
  def self.up
    create_table :orders do |t|
      t.string :name, :null => false
      t.string :belong, :null => false
      t.text :comment, :null => false
      t.datetime :checked_at, :null => true
      t.date :order_date, :null => false

     # t.timestamps
    end
  end

  def self.down
    drop_table :orders
  end
end

ですね。checked_atがdatetime型になっている訳です。
実際にこれを用いて色々やろうとするとエラーが出る訳です。

class Order < ActiveRecord::Base
  has_many :line_items
  
  BELONG_TYPES = [
    ["外来", "外来"],
    ["病棟", "病棟"],
    ["放射線", "放射線"],
  ].freeze
  
  validates_presence_of :name, :belong, :message => "が空の状態で送信する事はできません。"
  
  #未確認の全ての物品を返す
  def self.pending_checking
    find(:all, :conditions => "checked_at is null")
  end
  
  #checked_at列は、未確認の場合に+NULL+
  #それ以外の場合に確認日時が保存される。
  def mark_checked
    self.checked_at = Time.now
  end
end

mark_checkedメソッドにて、cheched_atの値(時間)を現在時刻(ここではチェックを入れた時間)に変更したいんですが、そーすると以下のようなエラーがボーン。


ActiveRecord::StatementInvalid in CheckController#check
ActiveRecord::ActiveRecordError: ????????????????????????: UPDATE orders SET checked_at = '--- 2008-10-03 15:19:03.165415 Z
' WHERE id = 2


やっぱりdatetime関連の項目を消せば解決という訳にはいかないようです。
だってこれが動かないと出来ないことがたくさん有るもの…
でもなあ…timestamp型にしたものは普通に動いてるんですよ。
勝手にtimestamp型のカラムで作成されるcreated_atとupdated_at。
(前略)/activerecord-2.1.1/lib/active_record/connection_adapters/mysql-adapter.rbにあるnative_database_typesメソッドを見てみても、timestamp型はdatetime型に変換されている。で、上手いこと使えている。
同じメソッド内でdatetime型についても書かれています。

def native_database_types #:nodoc:
        {
          :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY".freeze,
・
・
・
          :datetime    => { :name => "datetime" },
          :timestamp   => { :name => "datetime" },
・
・
・
        }
      end

何やねんと。
何処で何が引っ掛かってるんだ?
えー、どうしよう。