2007年06月23日

reset_column_information

DBマイグレーションで既に存在するテーブルにカラムを追加後、そこに他の項目値によってデフォルト値を自動で突っ込みたくなり、少々はまりましたので、覚え書き。

Hogeというモデルがあり、progressという項目に0 .. 9の範囲で進捗度が格納されているとする。

progressの9は完了なのだが、9に設定された日を格納するcomplete_dateというdate型の項目を追加したい。既存のレコードにはprogressが9で、complete_dateがNULLの場合、complete_dateに今日の日付を入れる。

で、マイグレーションでは普通にRubyのコードも書ける様なので、こんな風にしてみた。

class AlterHoges < ActiveRecord::Migration def self.up add_column :hoges, :complete_date, :date Hoge.update_all "complete_date = now()", "progress = 9 AND complete_date is null" end def self.down remove_column :hoges, :complete_date end end

しかし、うまくいかない。小一時間んで、RailsによるアジャイルWebアプリケーション開発のマイグレーションの項目を読み直して見たところ、発見。

モデルの変更があったことをActiveRecordに知らせないといけない。よく考えると当たり前だ。具体的には下記をadd_columnとupdate_allの間に挟むということ。

Hoge.reset_column_information

RailsによるアジャイルWebアプリケーション開発はRails0.9ベースに書かれていて、脚注と付録で1.0をサポートしている、結構古めの内容だが、Railsの全体と、重要なイディオムを習得するために最近Railsをやり始めた人もやはり目を通しておくべき本だと思います。

投稿者 iwazawa : 22:13 | コメント (0)

Windows版Safari

Safari 3のパブリックβ版がリリースされ、ご存じの通りWindowsに対応しています。

知ったのは数日前の発表の直後で、もちろんその日の内にインストールしてみたのですが、日本語ページは全くまともに表示されず、がっかりしてBlogにも書かなかった(笑)

先ほどApple Software Updateが当たって、Safariが更新されたので試しに起動してみると、ちゃんと日本語ページでも表示されるようになってた。

たしかに、いくつかのページを見てみた感触だとAppleが言うようにIEよりもかなり体感速度が速く感じます。

暫く使ってみても良いかなと思ったのですが、会社のMacでもSafariを常用にしていない。何故かというと、マウスジェスチャーとはてなのタブ入力のAjaxによる補助([を入れたらコンプリーションが始まる機能)が使えないから。

Windows版も同様に上記が使えなかったので、残念だけど、常用はあきらめ。

ただ、Safariの動作確認がWindowsでもできるのは、開発者としては、かなり意義があると思う。もっともMacのSafariと全く同じ挙動をしてくれるならですが(笑)

と、思ったら妙にWindowsが重くなっていることに気づいた。

Eclipseで開発中だったのだが、妙にエディタの動作がのろい。

おかしいなと思って、タスクマネージャでCPUを使っている人を調べたら、Safariでございました。

強制終了。また、次のApple Software Updateに期待だな(苦笑)

投稿者 iwazawa : 15:31 | コメント (0)