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で小さいほうからにしておく) 。
参考
- Journal In Time - pagination http://shugo.net/jit/20050422.html