TodoList: 公開情報表示を少し変更2006年12月22日 12時20分47秒

さて、Todo の所属団体 (Organization) への公開情報の表示した。さらに、前回から公開/非公開の判定に中止を入れた。折角、レコードを保存しているのだから有効に使おう。

以下が、show.rhtml の全文。


% cat app/views/todo/show.rhtml
<% for column in Todo.content_columns %>
<p>
  <b><%= column.human_name %>:</b> <%=h @todo.send(column.name) %>
</p>
<% end %>

<table>
  <tr>
  <% for column in Organization.content_columns %>
    <th><%= column.human_name %></th>
  <% end %>
   <th>Published-to</th>
  </tr>

<% for org in Organization.find_all() %>
  <tr>
  <% for column in Organization.content_columns %>
    <td><%= org.send(column.name) %></td>
  <% end %>
    <td><%=
      if @organization_ids.member?(org.id)
      then
        if @published_organizations[
          @organization_ids.index(org.id)]['published'] != 0
        then
          "YES"
        else
          "STOPPED"
        end
      else
        "NO"
      end %></td>
  </tr>
<% end %>
</table>

<%= link_to 'Edit', :action => 'edit', :id => @todo %> |
<%= link_to 'Back', :action => 'list' %>

以下が、todo_controller.rb の show 関数。


%vi app/controllers/todo_controller.rb
  def show
    @todo = Todo.find(params[:id])
    @published_organizations =
      TodoOrganizationPermission.find(:all,
        :conditions=>["todo_id=?", params[:id]])
      #TodoOrganizationPermission.find_all("todo_id = " + params[:id])
    @organization_ids = @published_organizations.map { |o| o.organization_id }
  end

これで、以下の様なページが出来る。

Description: create todo list

Done: 0

Name Description Published-to
Drexel Drexel University YES
CS Computer Science Department YES
Math Mathmatics Department NO
Engineer Engineer Department STOPPED

Edit | Back {"action"=>"show", "id"=>"1", "controller"=>"todo"}

次は、公開状態を変更する。show 関数に加えた部分を別の関数に仕立て上げて、show.rhtml に加えた部分をパーシャルにすれば良さそうだ。

前回次回