そこで、今回はリストの並べ替えに挑戦してみました。
[scaffold]が生成する足場では、リスト(list.rhtml)は[id]順です。けれども名簿に登録された人数が増えれば、名前順なり、所属順なり、あるいは登録の逆順なりに並んでいて欲しくなります。
リストを任意のキーでソートする
では、早速改造に掛かりましょう。まず、app/views/people/list.rhtml を開きます。今回は、表の見出し部をクリックするとその並びになるようにしましょう。そこで、見出部を次のようにします。
<tr> <th><%= link_to '氏名', :action => 'orderName' %></th> <th><%= link_to '所属', :action => 'orderOrgId' %></th> <th><%= link_to 'eメール', :action => 'orderEMail' %></th> <th colspan="3"><%= link_to '登録順', :action => 'orderNew' %>/<%= link_to '更新順', :action => 'orderUpdate' %></th> </tr> |
実行されるアクションは app/controllers/people_controlles.rb に記述します。
まず、並び替えの実現ですが、これは、
def list @person_pages, @people = paginate :people, :per_page => 10, :order => $orderPeople end |
def list $orderPeople = 'id' if $orderPeople == nil @person_pages, @people = paginate :people, :per_page => 10, :order => $orderPeople end |
それではアクションを記述しましょう。
people_controlles.rb の後ろの方に、以下を追加します。
def orderName $orderPeople = 'name' index end def orderOrgId $orderPeople = 'orgId' index end def orderEMail $orderPeople = 'eMail' index end def orderNew $orderPeople = 'created_on DESC' index end def orderUpdate $orderPeople = 'updated_on DESC' index end |
http://localhost:3000/people/
にアクセスして、確認してみましょう。どうですか? 並び順が変わったでしょう?
ここでは、$orderPeople というグローバル変数を使っていますが、session とどちらが良いのかは、私には判りません。
トップページへのリンク
トップページからのリンクは作りましたが、逆はまだでした。いちいち http://localhost:3000/ を打つのも鬱なんで、リンクを作ります。場所は、……app/views/layouts 以下のファイルにしましょう。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>People: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> </head> <body> <p style="color: green"><%= flash[:notice] %></p> <%= yield %> <p> <hr height="1" color="black" noshade /> <%= link_to 'Top', :controller => 'welcome', :action => 'index' %> </p> </body> </html> |
タイトル部をクリックすると並び変わります。右の[登録順][更新順]をクリックすると、それぞれ降順に並びます。
今回は[people]の並べ替えを行いました。[organizations]も同様に改造しておくと便利でしょう。やり方は同じですので、ここには記しません。
『名簿管理』アーカイブ