TodoList: 団体に属する人達2007年01月13日 12時31分37秒

忘れていた。各所属団体 (Organization) に所属する人達 (User) の情報も見られる様にする必要がある。Todo を割り当てる機能を付ける予定だったのだから、他のユーザ (User) がわからなければ困る。

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>

もう少し綺麗に書ければいいのだが、今回は手っ取り早く全て羅列した。

前回次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2007/01/13/1109994/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。