2007年7月5日木曜日

Tableのソート

Railsを使って、DBのテーブルの中身を表にする時に
列名でソート出来るように作るにはどうすれば良いか?

パッと考え付くのは、Actionを追加しlink_to_remoteを使って
行なうというくらい。(私の技量の問題はおいておいて。)

ということで、以下の流れをユーザーに提供する手段を探していました。
1、普通のFormを使って、条件を設定し合致するテーブルを生成
2、検索結果をソートする
なお、2のソートの時に通信が発生しない方が私の会社の環境を
考えると良い様に感じました。(海外拠点の回線がかなり細い為。)

そこで見つけたのが「tablesort.js」です。

<使い方>
form_remote_tagを使って、Formを構成する。
検索結果を表示するテーブルをXHTMLで書くこと。
(Rails自体は元々XHTMLを使うことが前提なのですが)

<table>
<thead>
<tr>
<th>No</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody id="list">
</tbody>
</table>

このように、最初tbodyは空にしておいて、form_remote_tagで
listをupdateするようにする。
つまり、ユーザのForm入力がAJAXの動きでサーバに届き、
サーバのActionで<tr><td>---</td></tr>を送り返せば
tbodyの中に結果が入ってきて表示されるようになる。
(AJAXが使えるようになるまでは、FormとTableを別フレームに切り
 検索が実行されてもFormが消えないようにしていたが、
 この方法なら部分的に書き換えられるだけなのですっきりする。)

さて、これでAJAXを利用して結果を表示するテーブルを
作れるのだが、
tablesort.js」をどう使うか。
作った最初は、Tableタグの外側でdivを切っておいて
tablesort.js」の
読み込みタグを含む形で送信するRHTMLを書いたが
ソートのリンクが機能しなかった。
結果、一番最初にユーザーに送る段階で列名(th)を定義し、
tbodyの中を差し替えるようにしたところ、ちゃんと動作した。

ということで、
tablesort.js」を使う上でのコツとしては
1、XHTMLのtableを使い、theadに列名を入れておいて事前に
  ユーザーに送信しておくこと。
2、formはAJAXを利用して、tbodyに結果を送るようにすること。
になります。

なお、具体的な
tablesort.js」の設定方法はリンクを参考にして下さい。
tablesort.js : リンク



0 件のコメント: