使用 ActionText 时转换回纯文本

Car*_*rds 6 ruby-on-rails ruby-on-rails-6 actiontext

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

class Post < ApplicationRecord
  has_rich_text :body
end
Run Code Online (Sandbox Code Playgroud)

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

Expected a string or an object that implements #to_str
Run Code Online (Sandbox Code Playgroud)

这是因为在纯文本列变成 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"> 
Run Code Online (Sandbox Code Playgroud)

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

=> #<ActionText::Content "<div class=\"trix-conte...">
Run Code Online (Sandbox Code Playgroud)

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

我不确定如何:

  • 从 body 属性中提取我的原始内容将其转换为没有 html 的纯文本

Car*_*rds 13

所以显然 ActionText 实例有一个方法来检索纯文本值to_plain_text。放在一起看起来像这样:

@post.body => <div>This is my markup</div>
@post.body.to_plain_text => This is my markup
Run Code Online (Sandbox Code Playgroud)