首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ActionText时转换回纯文本

使用ActionText时转换回纯文本
EN

Stack Overflow用户
提问于 2019-08-17 17:53:17
回答 3查看 4.7K关注 0票数 9

首先,让我说我喜欢Rails 6在ActionText中提供的功能。不幸的是,当我在post模型中将其声明为属性时:

代码语言:javascript
复制
class Post < ApplicationRecord
  has_rich_text :body
end

我不能再访问身体的短信了。它成为一个ActionText实例。我完全理解这个功能是如何工作的,但有时我需要将正文的纯文本传递给其他外部方法。在我的例子中,我在我的元描述标签中使用了一个名为meta的创业板。这样做会导致此错误:

代码语言:javascript
复制
Expected a string or an object that implements #to_str

这是因为纯文本列之前的内容变成了AT实例:

代码语言:javascript
复制
=> #<ActionText::RichText id: 39, name: "body", body: #<ActionText::Content "<div class=\"trix-conte...">, record_type: "Post", record_id: 161, created_at: "2019-08-17 17:34:27", updated_at: "2019-08-17 17:34:27"> 

看到它附带了getter方法,我试着做一些类似于@post.body.body的事情,但这实际上是

代码语言:javascript
复制
=> #<ActionText::Content "<div class=\"trix-conte...">

还请注意,我试图在post模型中创建一个方法,但是一旦声明了has_rich_text,我就不再具有对正文文本的原始访问权。

我不太确定该如何:

  • 从body属性中提取原始内容,将其转换为不带html的纯文本。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-17 18:28:00

因此,显然ActionText实例有一种使用to_plain_text检索纯文本值的方法。所有这些看起来都是这样的:

代码语言:javascript
复制
@post.body => <div>This is my markup</div>
@post.body.to_plain_text => This is my markup
票数 22
EN

Stack Overflow用户

发布于 2020-05-12 02:09:12

文本之上,我们可以调用压扁删除新行'\n‘

票数 1
EN

Stack Overflow用户

发布于 2022-09-06 15:32:44

是的,卡尔的回答是正确的

代码语言:javascript
复制
@post.body.to_plain_text #=> This is my markup without image

但是,如果您的操作文本中有任何附件(如blob图像),则它们将显示为

代码语言:javascript
复制
@post.body.to_plain_text #=> This is my markup with image[PXL_20210808_152511813.jpeg] 

这是由于这段代码,当它调用#to_plain_text时,每个附件都会调用它。

如果您不想显示blob附件的文本,则需要覆盖ActiveStorage::Blob#attachable_plain_text_representation

这样做的一个方法是:

代码语言:javascript
复制
# config/initializers/active_storage_overrides.rb

module ActiveStorageBlobOverrides
  def attachable_plain_text_representation(caption = nil)
    ""
  end
end

Rails.configuration.to_prepare do
  ActiveStorage::Blob.send :prepend, ::ActiveStorageBlobOverrides
end

你将如何结束:

代码语言:javascript
复制
@post.body.to_plain_text #=> This is my markup with image 

我希望这能为您节省几个小时的调试时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57538658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档