昨夜は飲み会があって深夜に帰宅したのですが、朝からいろいろとタスクを片付けて貴重な時間をRubyに…。ところが、トラブルではまりました。
Ruby on Railsでscaffoldにより生成したViewのうち、"index.html.erb"ファイルは作成したモデルの情報を一覧表示する画面です。この画面のうち、削除リンクをクリックしても確認ダイアログも表示されず、そのまま"show.html.erb"画面へ遷移してしまいます…。
このときの index.html.erb ファイルは以下の通りです。 [sourcecode language="ruby"] <h1>Listing himokus</h1><table> <tr> <th>費目コード</th> <th>費目名</th> <th>説明</th> <th>貸借区分</th> <th>表示順</th> <th>削除状態</th>
<th></th> <th></th> <th></th>
</tr>
<% @himokus.each do |himoku| %> <tr> <td><%= himoku.himoku_code %></td> <td><%= himoku.himoku_name %></td> <td><%= himoku.himoku_desc %></td>
<!-- 貸方・借方をコンボボックスで表示する --> <td><%= himoku.taishaku_div %></td> <td><%= himoku.sort_order %></td> <td><%= himoku.del_flg %></td> <td><%= link_to '表示', himoku %></td> <td><%= link_to '詳細編集', edit_himoku_path(himoku) %></td> <td><%= link_to '削除', himoku, :confirm => '削除してもよろしいですか?', :method => :delete %></td>
</tr> <% end %> </table>
<br />
<%= link_to 'New Himoku', new_himoku_path %> [/sourcecode]
次にHTMLファイルは以下の通り。
[sourcecode language="html"]
<h1>Listing himokus</h1>
<table> <tr> <th>費目コード</th> <th>費目名</th> <th>説明</th> <th>貸借区分</th> <th>表示順</th> <th>削除状態</th>
<th></th> <th></th> <th></th>
</tr>
<tr> <td>abc</td> <td>abc</td> <td></td>
<!-- 貸方・借方をコンボボックスで表示する --> <td>1</td> <td>1</td> <td>0</td> <td><a href="/himokus/5">表示</a></td> <td><a href="/himokus/5/edit">詳細編集</a></td> <td><a href="/himokus/5" data-confirm="削除してもよろしいですか?" data-method="delete" rel="nofollow">削除</a></td>
</tr> <tr> <td>test</td> <td>テスト</td> <td>ほげほげ</td>
<!-- 貸方・借方をコンボボックスで表示する --> <td>0</td> <td>3</td> <td>0</td> <td><a href="/himokus/2">表示</a></td> <td><a href="/himokus/2/edit">詳細編集</a></td> <td><a href="/himokus/2" data-confirm="削除してもよろしいですか?" data-method="delete" rel="nofollow">削除</a></td>
</tr> <tr> <td>aaaa</td> <td>aaaaa</td> <td></td>
<!-- 貸方・借方をコンボボックスで表示する --> <td>0</td> <td>4</td> <td>0</td> <td><a href="/himokus/3">表示</a></td> <td><a href="/himokus/3/edit">詳細編集</a></td> <td><a href="/himokus/3" data-confirm="削除してもよろしいですか?" data-method="delete" rel="nofollow">削除</a></td>
</tr> <tr> <td>aaa</td> <td>テスト</td> <td>テスト</td>
<!-- 貸方・借方をコンボボックスで表示する --> <td>1</td> <td>5</td> <td>0</td> <td><a href="/himokus/1">表示</a></td> <td><a href="/himokus/1/edit">詳細編集</a></td> <td><a href="/himokus/1" data-confirm="削除してもよろしいですか?" data-method="delete" rel="nofollow">削除</a></td>
</tr> <tr> <td>aaaaaaaa</td> <td>tesuto</td> <td></td>
<!-- 貸方・借方をコンボボックスで表示する --> <td>1</td> <td>5</td> <td>0</td> <td><a href="/himokus/4">表示</a></td> <td><a href="/himokus/4/edit">詳細編集</a></td> <td><a href="/himokus/4" data-confirm="削除してもよろしいですか?" data-method="delete" rel="nofollow">削除</a></td>
</tr> </table>
<br />
<a href="/himokus/new">New Himoku</a>
[/sourcecode]
まだ詳しく理解していないのですが、 [sourcecode language="ruby"] <a href="/himokus/4" data-confirm="削除してもよろしいですか?" data-method="delete" rel="nofollow">削除</a> [/sourcecode] はJavaScriptで制御しています。ところが、上記のHTMLファイルにはJavaScriptファイルをインクルードする項目はおろか、 HTML宣言なども見当たりません…(ーー;)
いろいろと試してみたところ、このViewに対応したコントローラファイルのコンストラクタ内でスーパークラスのコンストラクタを 呼んでいないため、出力されるHTMLファイルに適用されるテンプレートファイルが適用されないことが原因でした。うーん、 やっぱりこういうトラブルを一つずつクリアしていくことがスキルアップへの近道なのでしょうね。
そろそろ、昨日の復習しないと…UML!オブジェクト指向!ソフトウェア設計!