しかし、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 を変更しない限り、所属は空欄のままだ。
セコメントをする