rails:1956
From: のりお <toykyo@t...>
Date: Tue, 16 Jan 2007 17:16:27 +0900
Subject: [rails:1956] Re: マイグレーションにおけるmysqlのtimestamp型
のりおです。
推測ですが、ActiveRecordは他のDBとの互換を考慮して、
MySQL依存のtimestamp型(自動更新される型という意味で)は
サポートしていないのではないかと思います。
依存という程MySQL独自の型ではないし、他のDBにも同じ
ような型はあるので
説得力はないです。
あとRailsにはupdated_at というマジックカラムがあり、
カラム名は強制されますが
代用可能なので、こっちを使えってことなのではないかと思います。
def self.up
create_table :tests do |t|
t.column 'updated_at', :datetime
end
end
どちらにしろあまり良い仕様とは言えない気もします。
どうしてもtimestamp型を使いたい場合は、migratoinの抽
象表現を捨てて
テーブル作成するしかないと思います。
あまり説得力がない返事で申し訳ないです。
もっと詳しい方いればお願いします。
なお、舞波いわく
「自分ならノータイムで ar に手をいれるかも」
ということで、気に入らないところはコメントアウトでw
とここまで書いてる内に舞波さんがチケットを見つけてくれました。
http://dev.rubyonrails.org/ticket/4351
どうやら、このチケットはすでにDHHによって明確に
wontfixされてしまったようです。
詳しい理由は上記チケットのページを読んでもらえればわかりますが、
結論としては代わりにマジックカラムを使えということみたいです。
On 2007/01/16, at 12:35, しろくま wrote:
> しろくまです。
>
> 素朴な疑問なのですが・・・
>
> migrationを使って、テーブルを作成しようと、
>
> def self.up
> create_table :tests do |t|
> t.column :last_update, :timestamp
> end
> end
>
> こんな感じで定義してみたのですが、実際にmysql上にできる
> テーブルで、
> last_update カラムはDATETIME型になります。
>
> 少し調べてみたところ、
> activerecord-1.14.4/lib/active_record/connection_adapters/
> mysql_adapter.rb
> にある、native_database_types というメソッド内に定義され
> たHashで、型名を
> シンボルからデータベースのカラムタイプ名に変換しているようです。
> (現在、私はmysqlを使用しています。)
>
> {
> ・・・
> :timestamp => { :name => "datetime" },
> ・・・
> }
>
> こんな感じになっています。
>
> ここでふと思ったのですが、何故あえて(?)timestamp型は
> 使用していないの
> でしょうか?
>
> timestamp型を使用することが推奨されていない等、何か事情がある
> のでしょうか?
>
>
> --
> ML: rails@r...
> 使い方: http://QuickML.com/
--
ML: rails@r...
使い方: http://QuickML.com/
1955 2007-01-16 04:35 [dev@c... ] マイグレーションにおけるmysqlのtimestamp型 -> 1956 2007-01-16 09:16 ┗[toykyo@t... ] 1961 2007-01-17 07:31 ┗[dev@c... ] 1962 2007-01-18 04:39 ┗[ohashi@s... ]