7

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

class Post < ApplicationRecord
  has_rich_text :body
end

我无法再访问正文的文本了。它成为一个 ActionText 实例。我完全理解这是此功能的工作原理,但有时我需要将正文的纯文本传递给其他外部方法。在我的例子中,我在我的元描述标签中使用了一个叫做元标签的 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属性中提取我的原始内容将其转换为没有html的纯文本
4

2 回答 2

19

所以显然 ActionText 实例有一个方法来检索纯文本值to_plain_text。总而言之,它看起来像这样:

@post.body => <div>This is my markup</div>
@post.body.to_plain_text => This is my markup
于 2019-08-17T18:28:00.347 回答
0

to_plain_text 之上,我们可以调用squish来删除新行 '\n'

于 2020-05-12T02:09:12.923 回答