2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

長い文字列を省略してレイアウト崩れを防ぐ... truncateメソッド

Last updated at Posted at 2021-06-29

image.png

はじめに

Railsのアプリケーションでデータベースからeachメソッドを使い表で一覧表示する画面を作成しました。
通常のレイアウトはこんな感じ。

Image from Gyazo

しかし、長い文字列になった場合に2行になってしまいレイアウトが崩れてしまいました。

Image from Gyazo

文字を小さくしてHTMLやCSSをいじって横並びにするということも考えましたが、
それだと見づらくなってしまいます。

そういえばよく**今日はいい天気だった。そこで...みたいなの見るけど出来ないのかなと調べたらありました。
その名は
truncateメソッド**。

truncateメソッド

truncateメソッドはActiveSupportによって使えるメソッドです。

"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20)
# => "我々は地球人だ。我々は宇宙人だ。我..."
trancateメソッドの使い方(デフォルト)
"省略したい文字列".trancate(文字列の数
# または
@インスタンス.trancate(文字列の数

オプション

オプション 説明
length: 表示させる文字数を設定
omission: 省略された文字列の後ろにつける文字列を設定
separator: 切り捨てる箇所を指定することができる

●lengthオプション

trancateの( )に数を入れて表示させる文字列の数を指定します。
注意しなければいけないのが上の例を見て数えてみるとわかりますが、20と指定したはずなのに
17しか表示されていません。
そう、...も含んでの数なんです。

なので、何文字表示させるかは...を考えて設定する必要があります。

●omissionオプション

omissionオプションは省略された文字列の後につける...などの文字列を指定することができます。
デフォルトでは**...**が表示されます。

omissionオプション
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20, omission: "~~~")
# => "我々は地球人だ。我々は宇宙人だ。我~~~"

# ちなみにomission: "~"とした場合は

"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20, omission: "~")
# => "我々は地球人だ。我々は宇宙人だ。我々は~"

●separatorオプション

separatorオプションを使うと切り捨てる箇所を指定することができます。
どういうことかというと、**我々は未**みたいな中途半端なところで文字列が切れるの防いでくれます。

例えば

separatorオプション
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20, separator: "我")
=> "我々は地球人だ。我々は宇宙人だ。..."

# オプションなしだと

"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20)
=> "我々は地球人だ。我々は宇宙人だ。我..."

こんな違いが出ます。
ちなみにseparatorオプションは正規表現も使えるようです。
Railsガイドより引用。

separatorオプション正規表現
"Oh dear! Oh dear! I shall be late!".truncate(18, separator: /\s/)
# => "Oh dear! Oh..."

この場合は空白文字のところで区切っていますね。

今回解説したのはActiveSupportのtruncateメソッド。
似たような感じのTextHelperとしてのtruncateがあるらしいです。

よく使いそうなのはActiveSupportの方かなあ。
使ってみたらまとめてみます。

それでは良いRailsライフを。

image.png

参考サイト

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?