如何去除Rails中Action Text(Trix Editor)生成内容的HTML标签?
嘿,这个问题我太熟了!很多用Action Text的开发者都会遇到这个情况——Trix编辑器生成的内容带着外层的trix-content div和各种HTML标签,要是只想拿纯文本内容,其实有好几种简单的解决办法,我给你拆解下:
Rails自带了strip_tags辅助方法,专门用来移除所有HTML标签。如果只是想在页面上展示纯文本,直接在视图里这么写就行:
<%= strip_tags @your_model.your_rich_text_field.body %>
把@your_model和your_rich_text_field换成你实际的模型实例和用has_rich_text定义的字段名就行。这个方法会把所有HTML标签(包括外层的trix-content div、<br>这些)全部去掉,只留下纯文本内容。
其实Action Text的RichText对象本身就提供了to_plain_text方法,这个方法比strip_tags更贴心——它会把HTML格式转换成更自然的纯文本格式,比如把<br>换成换行符,列表转换成带符号的条目,体验更好:
<%= @your_model.your_rich_text_field.to_plain_text %>
如果是在控制台测试,直接调用@your_model.your_rich_text_field.to_plain_text就能看到效果,我个人更推荐这个方法!
如果需要经常用到纯文本内容,不想每次都转换,可以在模型里加个回调,把纯文本版本存到数据库里:
首先给你的表加一个存储纯文本的字段:
rails generate migration AddPlainTextContentToYourModels plain_text_content:text rails db:migrate
然后在模型里添加回调逻辑:
class YourModel < ApplicationRecord has_rich_text :your_rich_text_field after_save :sync_plain_text_content private def sync_plain_text_content self.plain_text_content = your_rich_text_field.to_plain_text save(validate: false) # 避免触发循环保存 end end
这样每次保存模型时,纯文本内容就会自动同步到plain_text_content字段里,之后直接调用@your_model.plain_text_content就能拿到无标签的内容了。
内容的提问来源于stack exchange,提问作者Rojan

