(4)削除の警告で削除対象のTitle項目を表示する
該当箇所の変更
削除警告のウィンドウは、link_toのオプション設定によって表示されている。
- ビュー list.rhtml
- app/views/softwares/list.rhtml
<% for software in @softwares %>
<tr>
<% for column in Software.content_columns %>
<td><%= link_to_if column.name == 'url',
h(software.send(column.name)),
software.send(column.name) %></td>
<% end %>
<td><%= link_to 'Show', :action => 'show', :id => software %></td>
<td><%= link_to 'Edit', :action => 'edit', :id => software %></td>
<td><%= link_to 'Destroy', { :action => 'destroy', :id => software }, :confirm => 'Are you sure?', :post => true %></td>
</tr>
<% end %>
該当箇所をこのように変更してみた。(項目ごとに改行を入れた、変更したのは太字の部分だけ)
<td><%= link_to 'Destroy',
{ :action => 'destroy', :id => software },
:confirm => "#{software.title} is deleted. Are you sure?",
:post => true %></td>
#{software.title} は、何をやっているのか?
ダブルか、シングルか、クォーテーションの違いを考えた。ダブルでもシングルでも、囲まれた中身はどちらも同じ「文字列」を表す。違いを知るためには、上記の該当箇所でシングルに替えて実行してみて、すぐ分かった。
書き方 | 表示 | |
---|---|---|
ダブル | "#{software.title} is deleted. Are you sure?" | Ruby is deleted. Are you sure? |
シングル | '#{software.title} is deleted. Are you sure?' | #{software.title} is deleted. Are you sure? |
つまり、ダブルクォーテションの中で、このように#{Rubyのコード}書かれていると、「Rubyのコード」が実行された結果の文字列で置き換わる。シングルクォーテションの場合は、中身はそのままの文字列として扱われる。この先よく使いそうな便利機能だ。
今回の場合は、変数softwareにデータベースの1件ずつのデータが入る。これを表示件数分繰り返している。1行目はタイトルがRubyなので、そこで「software.title」を実行すると「Ruby」という結果が返ってくるのだ。
link_toメソッドの構文
link_to 表示文字列, { :action => メッソド名, id: => データベースのテーブルid }, :confirm => 警告メッセージ, :post => true
- 表示文字列に、メッソッド名/idを呼び出すリンクを作成する。
- メソッド呼び出しの前に、警告ウィンドウにメッセージを表示して確認する。
- :post => trueが指定されているので、POST扱いでデータ送信される。