使用 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 文本的原始访问权限。
我不太确定如何:
- 从body属性中提取我的原始内容将其转换为
没有 html
的纯文本
很明显,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'
首先让我说,我喜欢 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 文本的原始访问权限。
我不太确定如何:
- 从body属性中提取我的原始内容将其转换为 没有 html 的纯文本
很明显,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'