はじめに
Railsのアプリケーションでデータベースからeachメソッドを使い表で一覧表示する画面を作成しました。
通常のレイアウトはこんな感じ。
しかし、長い文字列になった場合に2行になってしまいレイアウトが崩れてしまいました。
文字を小さくしてHTMLやCSSをいじって横並びにするということも考えましたが、
それだと見づらくなってしまいます。
そういえばよく**今日はいい天気だった。そこで...
みたいなの見るけど出来ないのかなと調べたらありました。
その名はtruncateメソッド
**。
truncateメソッド
truncateメソッドはActiveSupportによって使えるメソッドです。
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20)
# => "我々は地球人だ。我々は宇宙人だ。我..."
"省略したい文字列".trancate(文字列の数)
# または
@インスタンス.trancate(文字列の数)
オプション
オプション | 説明 |
---|---|
length: | 表示させる文字数を設定 |
omission: | 省略された文字列の後ろにつける文字列を設定 |
separator: | 切り捨てる箇所を指定することができる |
●lengthオプション
trancateの( )
に数を入れて表示させる文字列の数を指定します。
注意しなければいけないのが上の例を見て数えてみるとわかりますが、20と指定したはずなのに
17しか表示されていません。
そう、...
も含んでの数なんです。
なので、何文字表示させるかは...
を考えて設定する必要があります。
●omissionオプション
omissionオプションは省略された文字列の後につける...
などの文字列を指定することができます。
デフォルトでは**...
**が表示されます。
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20, omission: "~~~")
# => "我々は地球人だ。我々は宇宙人だ。我~~~"
# ちなみにomission: "~"とした場合は
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20, omission: "~")
# => "我々は地球人だ。我々は宇宙人だ。我々は~"
●separatorオプション
separatorオプションを使うと切り捨てる箇所を指定することができます。
どういうことかというと、**我々は未
**みたいな中途半端なところで文字列が切れるの防いでくれます。
例えば
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20, separator: "我")
=> "我々は地球人だ。我々は宇宙人だ。..."
# オプションなしだと
"我々は地球人だ。我々は宇宙人だ。我々は未来人だ。我々は原始人だ。".truncate(20)
=> "我々は地球人だ。我々は宇宙人だ。我..."
こんな違いが出ます。
ちなみにseparatorオプションは正規表現も使えるようです。
Railsガイドより引用。
"Oh dear! Oh dear! I shall be late!".truncate(18, separator: /\s/)
# => "Oh dear! Oh..."
この場合は空白文字のところで区切っていますね。
今回解説したのはActiveSupportのtruncateメソッド。
似たような感じのTextHelperとしてのtruncateがあるらしいです。
よく使いそうなのはActiveSupportの方かなあ。
使ってみたらまとめてみます。
それでは良いRailsライフを。
参考サイト