A Little Each Day

note to self

Railsで長い文字列を省略して「続きを読む」機能を実装する

こんにちは。本日はRailsで長い文字列を省略して、「続きを読む」を実装する方法です

「あいうえおかき...」みたいな長い文字列を省略して、「続きを読む」・「もっと見る」のようなリンクを押したら詳細ページに飛ぶみたいな機能を実装したいと思うことがあると思います。

Railsでは「truncate」というメソッドが用意されていて、簡単に指定した長い文字列を省略できてしまいます。

長い文字列

まずは例として適当に長い文字列をつくっていきます。

f:id:chi_kun:20170810153816p:plain


一覧画面

f:id:chi_kun:20170810154038p:plain


特に何もしなければ、投稿した内容部分はそのまま長い文字列が表示されるだけです。

この文字列の部分を「...」を用いて省略していきます。


truncateメソッド

文字列を省略するのは簡単で、省略したいところに「truncate」メソッドを書くだけです。

<h1>Posts</h1>

<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Content</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.title %></td>

        <%# ここから修正 %>
        <td><%= truncate(post.content) %></td>
        <%# ここまで修正 %>

        <td><%= link_to 'Show', post %></td>
        <td><%= link_to 'Edit', edit_post_path(post) %></td>
        <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<%= paginate @posts %>
<br>

<%= link_to 'New Post', new_post_path %>


これで見てみると・・・

f:id:chi_kun:20170810155246p:plain


ちょっとわかりにくいかもしれませんが、「ひ...」となっていて文字列が省略されていることがわかると思います。

ちなみにデフォルトだと30文字まで表示できます。

もしも表示したい文字数を調整したい場合は、「length」オプションを使います。

<%= truncate(post.content, length: 10 ) %>


この例だと10文字まで表示して残りは省略するということです。


lengthオプションの他にも、「separator」・「omission」の各オプションが用意されています。


リンクと組み合わせる

長い文字列が省略できたので「続きを読む」というリンクをつくって、showアクション(詳細)にリダイレクトしましょう。

truncateメソッドの部分だけを抜粋すると以下のようなコードになります。

<td><%= truncate(post.content) %></td>
<td><%= link_to '続きを読む', post %></td>


すると長い文字列が省略されて、且つ「続きを読む」リンクを実装できます。

f:id:chi_kun:20170810163207p:plain


「続きを読む」ボタンを押せばshowアクションに移動します。

f:id:chi_kun:20170810163600p:plain


本当に簡単に文字列を省略して、続きを読む機能を実装できてしまいますね。



本日は以上です。