✂️

【Rails】文字列を省略表示できるメソッド

2024/02/23に公開

はじめに

今回は、一覧画面で本文を表示するときなどに便利な、長い文字列を省略して表示することができるメソッドをご紹介します。

環境

  • OS: Windows
  • IDE: Cloud9
  • Ruby-3.1.2
  • Rails 6.1.7.6

truncateメソッド

文字列を省略することができるメソッドです。
デフォルトでは30文字に省略され、文末は「 … 」と表示されます。

"文字列".truncateの形に( )で字数を指定することで、何文字に省略するか決めることも可能です。
例えば15文字に省略したい場合は以下のようになります。

"これはサンプルです。これはサンプルです。これはサンプルです。".truncate(15)
=> "これはサンプルです。これ..."

※ 文末の...(3点)も含めた15文字が表示されます。

使い方

truncateメソッドはオプションをつけることで様々な指定ができます。
これから紹介するオプションは3つ。内容は以下の通りです。

オプション 説明 デフォルト値
:length 切り捨ての桁数 30
:separator 切り捨てる箇所を表す文字列
:omission 切り捨て時に末尾に付与する文字列

基本的な書き方はこちら。

  • "文字列".truncate(, オプション)
  • truncate(文字列 [, オプション])

ではオプションとそれぞれの使い方を見てみましょう。

lengthオプション

省略して表示する文字数を指定できるオプションです。
※指定した字数には、文末に表示される「...」の3文字が含まれます。
基本形は、truncate(文字列, length: 字数)

app/views/post/index.html.erb
<!-- 投稿本文の表示を60文字に省略したい場合 -->
<%= truncate(post.body, length: 60) %>

separatorオプション

どのポイントで省略するか指定できるオプションです。

<!-- 10文字で切り捨てた内、「。」の箇所で省略する場合 -->
"これはサンプル。これはサンプル。これはサンプル。".truncate(10, separator: "。")
=> "これはサンプル..."

<!-- 20文字で切り捨てた内、「。」の箇所で省略する場合 -->
"これはサンプル。これはサンプル。これはサンプル。".truncate(20, separator: "。")
=> "これはサンプル。これはサンプル..."

ヘルパーメソッドとしての使用例

app/views/post/index.html.erb
<%= truncate(post.body, length: 20, separator: '。') %>
=> "これはサンプル。これはサンプル..."

omissionオプション

文末につく文字列を指定できるオプションです。
これを指定しない場合、デフォルトは「...」で表示されます。

<!-- 表示するのは20字。文末には「~~~」をつけたい場合 -->
<%= "これはサンプル。これはサンプル。これはサンプル。".truncate(20, omission: '~~~') %>
=> "これはサンプルです。これはサンプル~~~"

ヘルパーメソッドとしての使用例

app/views/post/index.html.erb
<%= truncate(post.body, length: 60, omission: '~~~') %>

余談

truncateはブロックを使って書くこともできます。
省略した文字列にdo ... endで中にlink_toを使えばYouTubeのコメントやXのように続きを表示するリンクテキストを貼ることができますね。

<%= truncate(post.body, length: 60) do %>
  <%= link_to '続きを表示する', post_path(post.id) %>
<% end %>

今回は長い文字列を省略して表示することができるtruncateメソッドをご紹介しました。
ヘルパーメソッドとしても使用できるためとても便利です。ぜひ使ってみてください。

最後まで読んでいただきありがとうございました。
新しい情報はどんどんキャッチしていきたいので、プラスの情報や修正点等ありましたらご連絡いただけますと幸いです。

Discussion