TodoList: Todo 詳細の削除2007年01月11日 12時11分11秒

今度は Todo の詳細 (Description) を消せるようにする。

まずは、詳細 (Description) をテーブルを使って、表示する。show.rthml と edit.rhtml を変更する。


% cvs diff app/views/todo/{show,edit}.rhtml
--- app/views/todo/show.rhtml   9 Jan 2007 04:27:15 -0000       1.5
+++ app/views/todo/show.rhtml   9 Jan 2007 04:31:58 -0000
@@ -4,7 +4,9 @@
 </p>
 <% end %>
 
-<%= render :partial => 'add2', :collection => @todo.descriptions %>
+<table>
+  <%= render :partial => 'add2', :collection => @todo.descriptions %&g
t;
+</table>
 
 <%= render :partial => 'published' %>
--- app/views/todo/edit.rhtml   9 Jan 2007 04:27:15 -0000       1.3
+++ app/views/todo/edit.rhtml   10 Jan 2007 05:05:56 -0000
@@ -10,7 +10,9 @@
   <%= submit_tag 'Add' %>
 <%= end_form_tag %>
 
-  <%= render :partial => 'add2', :collection => @todo.descriptions %>
+<table>
+  <%= render :partial => 'add2', :collection => @todo.descriptions %>
+</table>
 
 <%= render :partial => 'published' %>

その後、partial で呼ばれている _add2.rhtml を編集する。


% cvs diff app/views/todo/_add2.rhtml
--- app/views/todo/_add2.rhtml  5 Jan 2007 04:41:41 -0000       1.1
+++ app/views/todo/_add2.rhtml  10 Jan 2007 05:07:53 -0000
@@ -3,14 +3,24 @@
 <tr id="description_<%= add2.id %>" >
 
   <!--[form:description]-->
+  <td>
   <p><label for="description_description">Description (
   <%= Language.find(add2.language_id).name %>
   ):
   </label>
+  </td>
+  <td>
   <%= text_field 'description', 'description',
     :name => "description[" + add2.id.to_s() + "][description]",
     :value => add2.description %>
   <%= hidden_field 'description', 'language_id', :value => add2.language_id %>
+  </td>
+  <td>
+     <%= link_to 'Destroy',
+       { :action => 'destroy_description', :id => add2.id },
+       :confirm => 'Are you sure?', :post => true %>
+  </td>
   </p>

まず、テーブルにするために tr タグを加えて、link_to を追加する。todo_controller.rb の destory_description 関数に飛ぶようにする。最後に大切なのが id だ。こちらは元の Todo の id ではなく詳細 (Description) の id を使う。削除の対象は詳細 (Description) だからだ。

そして、目的の詳細 (Description) を削除する。


% cvs diff app/controllers/todo_controller.rb
--- app/controllers/todo_controller.rb  9 Jan 2007 04:27:15 -0000       1.13
+++ app/controllers/todo_controller.rb  10 Jan 2007 04:58:08 -0000
@@ -70,5 +80,13 @@
     redirect_to :action => 'list'
   end
 
+  def destroy_description
+    desc = Description.find(params[:id])
+    desc.destroy()
+    redirect_to :action => 'edit', :id => desc.todo_id
+  end
+
   def result
     @keyword = @params[:user][:keyword]

destroy を呼ぶと、データベースからは削除されるが、オブジェクトは更新不可能になるが、まだ生きている。そこから、元となった Todo の id を引っ張り出して、show.rhtml に飛ぶ。

前回

コメント

コメントをどうぞ

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

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

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

トラックバック

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

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