TodoList: 団体に属する人達 ― 2007年01月13日 12時31分37秒
app/views/user/list.rhtml があるが、user_engine がこれを使い、様々な設定が出来るようになっている。これに、ユーザの役割 (Role) によって更に制限を掛けて、見られる項目を変更するのは骨が折れそうだ。。
そこで、app/views/organization を変更する。app/controlers/organization_controller.rb で scaffold :organiation
をやっているので、まずはテンプレートの作成から。
% ruby script/generate scaffold organization organization
exists app/controllers/
exists app/helpers/
exists app/views/organization
exists test/functional/
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
skip app/models/organization.rb
identical test/unit/organization_test.rb
identical test/fixtures/organizations.yml
create app/views/organization/_form.rhtml
create app/views/organization/list.rhtml
create app/views/organization/show.rhtml
create app/views/organization/new.rhtml
create app/views/organization/edit.rhtml
overwrite app/controllers/organization_controller.rb? [Ynaq] y
force app/controllers/organization_controller.rb
overwrite test/functional/organization_controller_test.rb? [Ynaq] n
skip test/functional/organization_controller_test.rb
identical app/helpers/organization_helper.rb
create app/views/layouts/organization.rhtml
identical public/stylesheets/scaffold.css
二段式 render partial でビューを変更する。_users.rhtml を作り、表の枠を作成し、その中から、_user.rhtml を collection を使って呼びユーザ (User) を表示する。
二段式にすると、もし他の場面で呼び出したくなった場合に便利だからだ。もし、show.rhtml で表を作り render partial collection を呼ぶと、他から呼ぶ場合に、表をもう一度作り直す必要が出て来る。逆に partial の内部で、表を作って各ユーザを表示すると、ユーザ毎にループが必要になる。ループを書くのを避けるためだ。
organization/show.rhtml をまず修正する。
% cvs diff app/views/organization/show.rhtml
diff -u -r1.1 show.rhtml
--- app/views/organization/show.rhtml 7 Jan 2007 05:24:27 -0000 1.1
+++ app/views/organization/show.rhtml 7 Jan 2007 05:53:54 -0000
@@ -4,5 +4,7 @@
</p>
<% end %>
+<%= render(:partial => 'users') %>
+
<%= link_to 'Edit', :action => 'edit', :id => @organization %> |
<%= link_to 'Back', :action => 'list' %>
次は organization/_users.rhtml と organization/_user.rhtml だ。
% cat app/views/organization/_user.rhtml
<%= error_messages_for 'user' %>
<tr>
<td>
<%= user.fullname %>
</td>
<td>
<%= user.email %>
</td>
<td>
<%= user.title %>
</td>
<td>
<%= user.phone %>
</td>
<td>
<%= user.address %>
</td>
<td>
<%= Language.find(user.language_id).name if user.language_id %>
</td>
</tr>
% cat app/views/organization/_users.rhtml
<%= error_messages_for 'users' %>
<table id="user_list" class="object_list">
<tr>
<th>Fullname</th>
<th>Email</th>
<th>Title</th>
<th>Phone</th>
<th>Address</th>
<th>Language</th>
</tr>
<%= render(:partial => 'user',
:collection =>
User.find(:all, :conditions => [ "organization_id = ?", params[:id]]))
%>
</table>
もう少し綺麗に書ければいいのだが、今回は手っ取り早く全て羅列した。
最近のコメント