v_manager/list.rhtmlからmanager/new.rhtmlやmanager/edit.rhtmlを呼ぶ
views/v_managers/list.rhtmlの
<td><%= link_to 'Show', :action => 'show', :id => v_manager %></td> <td><%= link_to 'Edit', :action => 'edit', :id => v_manager %></td> <td><%= link_to 'Destroy', { :action => 'destroy', :id => v_manager }, :confirm => 'Are you sure?', :post => true %></td>
を
<td><%= link_to 'Show', :action => 'show', :id => v_manager %></td> <td><%= link_to 'Edit', :action => 'edit', :id => manager %></td> <td><%= link_to 'Destroy', { :action => 'destroy', :id => manager }, :confirm => 'Are you sure?', :post => true %></td>
としてみると
undefined local variable or method `manager' for #<#<Class:0x6cf5afc>:0x6cf5ad4>
でエラーになる。うーん、そうかidに渡すパラメータは、選択されているv_manager.idの値だものね。ここをmanagerに変更しても駄目じゃん。
元に戻して、actionの対象を変更してみる。
<td><%= link_to 'Edit', :action => 'Manager.edit', :id => v_manager %></td>
と、文法エラーは消えたが、実行してみると
No action responded to Manager.edit
が帰ってきた。生成されたページのソースを見てみると
<td><a href="/v_managers/Manager.edit/3">Edit</a></td>
となっている。うん、当然だねぇ。/v_managers/の部分を変更できなきゃね。で、どうする?
だれが、/v_manager/Manager.edit/3の部分を作っているかを調べてみると、ルーティング定義の中で行っているらしい。で、url_forというメソッドを見つけた。
<td><%= link_to 'EDIT', url_for(:controller=>'managers', :action => 'edit', :id => v_manager) %><td>
と書き直すと、ちゃんとmanagers/editを呼んでくれる。ということで、
v_managers/list.rhtmlを
<% for v_manager in @v_managers %> <tr> <% for column in VManager.content_columns %> <td><%=h v_manager.send(column.name) %></td> <% end %> <td><%= link_to 'Show', :action => 'show', :id => v_manager %></td> <td><%= link_to 'EDIT', url_for(:controller=>'managers', :action => 'edit', :id => v_manager) %><td> <td><%= link_to 'Destroy', url_for(:controller=>'managers', :action => 'destroy', :id => v_manager), :confirm => 'Are you sure?', :post => true %></td> </tr> <% end %> </table> <%= link_to 'Previous page', { :page => @v_manager_pages.current.previous } if @v_manager_pages.current.previous %> <%= link_to 'Next page', { :page => @v_manager_pages.current.next } if @v_manager_pages.current.next %> <br /> <%= link_to 'New v_manager', url_for(:controller=>'managers', :action => 'new') %>
に変更*1
後は受け側のmanagers/edit.rhtmlとmanager/new.rhmtlのlist先をv_managersに変更してみるが、editで作成した直後に表示されるのは、やっぱりmanagers/list.rhtmlだぁ。
しかも、new.rhtmlからでは、コントロールできそうにないし、edit.rhtmlでも更新直後はmanagers/list.rhtmlを表示する。
*1: Destroyの部分で、url_for(:controller=>'managers', :action => 'destroy', :id => v_manager, :confirm => 'Are you sure?', :post => true)とすると、:confirm以降が単にパラメータとして渡されてしまうので、:confirmの前で一回括弧を閉じること