【Rails】Scaffold link_to pathの省略

Ruby on Railsアイキャッチ画像

RailsのCRUDを簡単に作ってくれるとても便利な機能Scaffoldについて。
便利だけど、高度にリファクタリングされており、初学者には理解に苦しむところがあると思うのでまとめました。

まずは、Scaffoldでアプリ立ち上げまでの手順のおさらい

# railsのバージョン5.2.5、データベースはpostgresqlで作成する場合
$ rails _5.2.5_ new ファイル名 -d postgresql

$ cd ファイル名

# モデルクラス名はdiaryとして作成する場合
$ rails g scaffold diary title:string body:text

$ rails db:create

$ rails db:migrate

以下は、rails g scaffold diary title:string body:text にてscaffoldを生成した際のビューファイルの中の一部です。

  <tbody>
    <% @diaries.each do |diary| %>
      <tr>
        <td><%= diary.title %></td>
        <td><%= diary.body %></td>
        <td><%= link_to 'Show', diary %></td>
        <td><%= link_to 'Edit', edit_diary_path(diary) %></td>
        <td><%= link_to 'Destroy', diary, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>

この中で、link_toメソッドのpathがかなり省略されて記述されています。

省略せずに書くと以下のようになります。

<td><%= link_to 'Show', diary_path(diary.id) %></td>
<td><%= link_to 'Edit', edit_diary_path(diary.id) %></td>
<td><%= link_to 'Destroy', diary_path(diary.id), method: :delete, data: { confirm: 'Are you sure?' } %></td>

ちなみに、method: :deleteは、klink_toヘルパーメソッドで生成するリンク先へのリクエストメソッドをDELETEすとするもの

コメント