Open4

ridgepole が updated_at で差分を出してしまう

  t.datetime   :updated_at,
               null: false, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
  t.datetime   :created_at,
               null: false, default: -> { 'CURRENT_TIMESTAMP' }

created_at は問題ないが、 updated_at はダメ

以下は ridgepole の diff.rb で default の Proc を call して文字列に変換している箇所。
上が現在のDBのダンプで下が Schema ファイル。

{:default=>"CURRENT_TIMESTAMP", :null=>false, :unsigned=>false}
{:null=>false, :default=>"CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP", :unsigned=>false}

ON UPDATE 以降が消えている。

+------------+--------------+------+-----+-------------------+-----------------------------+
| Field      | Type         | Null | Key | Default           | Extra                       |
+------------+--------------+------+-----+-------------------+-----------------------------+
| updated_at | datetime     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| created_at | datetime     | NO   |     | CURRENT_TIMESTAMP |                             |
+------------+--------------+------+-----+-------------------+-----------------------------+

sql からテーブル定義を見ると、 Extra というところに入ってしまっているものが dump されていないのがわかる。

ridgepole は多分、 rails の db:dump の機能を使って現DBから Schema を生成し、 Schemafile と差分検出して適用しているのだと思うが、 db:dump が extra を出してくれないのだと思う。
(rails 標準の migration 機能は db:dump を見ないので問題にはならない)

ログインするとコメントできます