Bookmark登録日のカラムをつけてみる。

ちょこっと触ったのでメモ。Bookmarkとか何か情報を管理するような場合は、新着情報やら、その他新しいもの準の情報が欲しかったりする。なので、その辺をつけてみた。Bookmarkのテーブルに次のようにlast_updated というようなカラムを追加する。

  ALTER TABLE bookmarks ADD COLUMN last_updated DATETIME;

今まで、登録したやつはしょうがないので、今の時間で更新しちゃう(たした、ブックマークないので、Table再作成でもいいんだけど)。

  UPDATE bookmarks set last_updated = now();

今後、登録するときは、現在時刻を登録したい。とりあえず、bookmarks_controller.rbをのぞいてみると、こんな風なコードがあった。

 def create
   @bookmark = Bookmark.new(params[:bookmark])
   if @bookmark.save
     flash[:notice] = 'Bookmark was successfully created.'
     redirect_to :action => 'list'
   else
     render :action => 'new'
   end
 end

見た感じは、新しいBookmarkエントリを、引き数から、作成して save でDBに登録。うまくいったら、list を表示して、駄目なら、new に戻る感じだ。ということは、Bookmark.new で新規インスタンスを作成したときに、saveする前に、last_updated を登録したら良さそうだ。デフォルトで、last_updated が設定されるか、試してないのでよくわからないけど、明示的に設定したらうまく動いた。というわけで、次の行を @bookmark.save の前に追加。

  @bookmark.last_updated = DateTime.new

このままでは、日付が入るだけなので、listの表示も最新が一番上に来るようにしてみたい。雛型、をみてみると

 def list
   @bookmark_pages, @bookmarks = paginate :bookmark, :per_page => 10
 end

という風になっていたので、paginate というやつをなんとか出来たら嬉しいなと。Googleで調べてみたら、こいつの引き数は、order_by を指定できるみたい。ということで、

 def list
   @bookmark_pages, @bookmarks = paginate :bookmark, :per_page => 10,
     :order_by => "last_updated desc, id"
 end

としたら、めでたくlistでは、一番新しいのが、一番上に表示された(同じ日付の時は、idで小さいほうからにしておく) 。

参考