徒然なるままに、日ぐらしP/Cに向ひて――
メインメニュー
ブログカレンダー
2017年 5月
« 4月    
 123456
78910111213
14151617181920
21222324252627
28293031  
WordPress カテゴリ一覧
『覚え書き』で、簡単な名簿管理アプリを作りました。かなり簡単に作れましたが、業務に生かすためにはまだまだ技術の習得が必要でしょう。
そこで、今回はリストの並べ替えに挑戦してみました。
[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>
[氏名]をクリックしたら[orderName]が実行され、[所属]をクリックしたら[orderOrgId]が実行され、……以下略。アクションの名前は好きに決めて下さい。
実行されるアクションは app/controllers/people_controlles.rb に記述します。
まず、並び替えの実現ですが、これは、
 def list
  @person_pages, @people = paginate :people, :per_page => 10, :order => $orderPeople
 end
[:order => "id"]のように、ソートのキーフィールドを指定します。ここでは、フィールド名を変数にしています。ついでに変数の初期値も入れておきましょう。
 def list
  $orderPeople = 'id' if $orderPeople == nil
  @person_pages, @people = paginate :people, :per_page => 10, :order => $orderPeople
 end
あとは、$orderPeople の値を変えてやれば並べ替えも自由自在です。
それではアクションを記述しましょう。
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
DESC は、言わずと知れた降順指定です。では、
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>
これだけです。layouts 以下のファイルに書いておけば、各画面に反映されます。



タイトル部をクリックすると並び変わります。右の[登録順][更新順]をクリックすると、それぞれ降順に並びます。

今回は[people]の並べ替えを行いました。[organizations]も同様に改造しておくと便利でしょう。やり方は同じですので、ここには記しません。

『名簿管理』アーカイブ
プリンタ出力用画面
友達に伝える