使用 ActionText 时转换回纯文本

Converting back to plain text when using ActionText

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

class Post < ApplicationRecord
  has_rich_text :body
end

我无法再访问 body 的文本。它成为一个 ActionText 实例。我完全理解这个功能是如何工作的,但有时我需要将 body 的纯文本传递给其他外部方法。在我的例子中,我在我的 meta-description 标签中使用 body 和一个名为 meta-tags 的 gem。这样做会导致此错误:

Expected a string or an object that implements #to_str

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

=> #<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 的事情,但这实际上是

=> #<ActionText::Content "<div class=\"trix-conte...">

另请注意,我曾尝试在 post 模型中创建一个方法,但是一旦 has_rich_text 被声明,我就不再具有对 body 文本的原始访问权限。

我不太确定如何:

很明显,ActionText 实例有一种方法可以使用 to_plain_text 检索纯文本值。整体看起来像这样:

@post.body => <div>This is my markup</div>
@post.body.to_plain_text => This is my markup

to_plain_text, we can call squish 之上删除新行 '\n'