まずは、詳細 (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 に飛ぶ。
前回。
セコメントをする