検索画面

キーワードでいくつかのカラムを検索する画面を作ってみた。
最初はAjax_scaffoldでやろうと思ったけど、DBのカラムになっていないカラムを検索できそうにないので自作する。
DBのカラムになっていないと言っても、joinしたらSQLからは見えるので自分で書く分には問題ない。これはすぐできた。
次はソートしたいな。
カラム名をクリックしたらソートさせたいけど、とりあえずカラム名とソート方向のパラメータを扱えるようにはした。現在ソート中のカラムだけはもう一度クリックしたらソート方向だけ変わるようにする。それ以外は常に昇順。
でもカラムが別テーブルだったり文字列を結合してたりするので:orderのパラメータは個別対応が必要だな。まぁしょうがない。
それでソートまではできた。時間はかかったけど。
それからpaginateを使っているのでソート条件は引き継がないと。それに詳細表示したら戻り先にも検索条件やソート条件を引き継がせたい。こういうのって簡単にやる方法ないのかな? セッションが一番楽なのか? それともhelperを上手く使えばいいのかも。
いろいろ考えたけど、結局paginateのナビゲートは

<%= link_to @params.merge(:page => @pages.current.previous) if @pages.current.previous %>
<%# はてなのシンタックスハイライトがerubyにまで対応している!! %>

として現パラメータの:pageだけ上書きさせる作戦をとった。
詳細ページから戻るときはそれだけのためにパラメータをいちいち渡したくないのでセッション使うか。最初Hash#updateにしてたけどここで:pageが書き換わると他のところで困ることに気付いたのでHash#mergeに変更。