Railsで、ブログや既存のAPIからHTMLタグ入りの文章を取得してくることがあります。
HTMLタグが含まれていると、styleに影響が出てしまったり
タグをエスケープしたりする手間が増えてしまいます。
このような時に、HTMLタグを取り除いて文字列のみを表示させる
strip_tagsというヘルパーメソッドの使い方を紹介します。
公式ドキュメントはこちら
タグを取り除く | Railsドキュメント
結論
- view_helperで使う場合
html = '<p>ミミッキュのいる生活</p>'
strip_tags(html)
=> 'ミミッキュのいる生活'
2. controllerで使う場合
html = '<p>ミミッキュのいる生活</p>'
# helperメソッドなので、ApplicationController.helpersから呼び出す
ApplicationController.helpers.strip_tags(html)
=> 'ミミッキュのいる生活'
目次
環境
OS: MacOS
メモリ: 32GB
Dependents
Rails6
Ruby 2.6
CentOS7 on Vagrant
Mysql 5.7
viewで使う場合
view側でタグを取り除きたい場合は簡単です。
普通にstrip_tagsを呼び出しましょう。引数に、タグを取り除きたい文字列を指定します。
<% html = '<p>ミミッキュのいる生活</p>' %>
<%= strip_tags(html) %>
view_helperでもそのまま使える
strip_tagsは、ヘルパーメソッドなので
application_helper.rbなどのview_helperの中でも、そのまま呼び出すことができます。
# application_helper.rb
module ApplicationHelper
def strip_html_tags(html)
truncate(strip_tags(html), length: 100, omission: '・・・')
end
end
上のコードは、受け取ったhtmlをタグを取り除き、先頭100文字のみを返すサンプルです。
truncateもまた、helperメソッドなので、helper内でそのまま呼び出すことができます。
controllerでも使いたい
strip_tagsをcontrollerで呼び出したい時もあると思います。
そういった場合、ApplicationController.helpers を使って、strip_tagsを呼び出すことができます。
html = '<p>ミミッキュのいる生活</p>'
# helperメソッドなので、ApplicationController.helpersから呼び出す
result = ApplicationController.helpers.strip_tags(html)
puts result
=> 'ミミッキュのいる生活'
他のhelperメソッドについても同様に呼び出せますので、覚えておきたいですね!
まとめ
今回は、文字列からHTMLタグを取り除くstrip_tagsメソッドについて紹介しました。
helperメソッドは、比較的使用頻度も高いメソッドですが、
contorllerで使いたくなった時に、どうやって呼び出すんだっけ?と、ついつい忘れがちなので気をつけたいです。
また、HTMLタグ意外にも、リンクを取り除いたり、文字を切り取ったり、
便利なメソッドが揃っているので、これからも少しずつ紹介できればと思います。
また、他にもrailsで使うメソッドの紹介記事を書いていますので
そちらも見ていただければ幸いです!