TodoList: 所属を list で表示2006年12月08日 10時30分29秒

前回は、organization テーブルと user テーブルを、各ユーザは一つの組織に所属出来るという、一対多の関連を作った。

しかし、rails の scaffold で使われているActiveRecord の関数では、_id で終わる項目は表示されない。そのため、http://localhost:3000/user/list にアクセスしても、どの組織に所属しているかが表示されない。

なお、今回は user_engine に変更を加えているので、http://localhost:3000/user/list を表示しているには、vendor/plugins/user_engine/app/views/user/list.rhtml である。これを、コピーしてくる必要がある。


% mkdir app/views/user
% cp vendor/plugins/user_engine/app/views/user/list.rhtml app/views/user

その後、list.rhtml を編集し、自分で組織を表示するように変更する。ユーザが何らかの組織に所属していた場合のみ、組織名を表示する。つまり、user.organization が NULL で無いときに表示だ。


% cvs diff -u8
--- app/views/user/list.rhtml   6 Dec 2006 07:37:12 -0000       1.1
+++ app/views/user/list.rhtml   6 Dec 2006 07:44:02 -0000
@@ -1,23 +1,25 @@
 <h1>Listing Users</h1>
 
 <table id="user_list" class="object_list">
   <tr>
 <% for column in @content_columns %>
     <th><%= column.human_name %></th>
 <% end %>
+    <th>Organization</th>
     <th>Actions</th>
   </tr>
 
 <% for user in @all_users %>
   <tr>
   <% for column in @content_columns %>
     <td><%=h user.send(column.name) %></td>
   <% end %>
+    <td><%= Organization.find(user.organization_id).name if user.organization_id %></td>
     <td>
       <ul class="actions">
         <%= link_if_authorized 'Show', {:action => 'show', :id => user }, :wrap_in => "li" %>
         <%= link_if_authorized 'Edit', {:action => 'edit_user', :id => user}, :wrap_in => "li" %>
         <% if authorized?(:action => 'delete_user') && (user.login != UserEngine.config(:admin_login)) %>
         <%= button_to 'Destroy', :action => 'delete_user', :id => user %>
       <% end %>
       </ul>
     </td>  
   </tr>

http://localhost:3000/user/list に、Organization が表示されるようになる。しかし、このままでは http://localhost:3000/user/edit からでは、所属を編集することができない。そのため、SQL で直接 users テーブルの organization を変更しない限り、所属は空欄のままだ。

前回次回