首先,让我说我喜欢Rails 6在ActionText中提供的功能。不幸的是,当我在post模型中将其声明为属性时:
class Post < ApplicationRecord
has_rich_text :body
end我不能再访问身体的短信了。它成为一个ActionText实例。我完全理解这个功能是如何工作的,但有时我需要将正文的纯文本传递给其他外部方法。在我的例子中,我在我的元描述标签中使用了一个名为meta的创业板。这样做会导致此错误:
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,我就不再具有对正文文本的原始访问权。
我不太确定该如何:
发布于 2019-08-17 18:28:00
因此,显然ActionText实例有一种使用to_plain_text检索纯文本值的方法。所有这些看起来都是这样的:
@post.body => <div>This is my markup</div>
@post.body.to_plain_text => This is my markup发布于 2022-09-06 15:32:44
是的,卡尔的回答是正确的
@post.body.to_plain_text #=> This is my markup without image但是,如果您的操作文本中有任何附件(如blob图像),则它们将显示为
@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
这样做的一个方法是:
# 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你将如何结束:
@post.body.to_plain_text #=> This is my markup with image 我希望这能为您节省几个小时的调试时间。
https://stackoverflow.com/questions/57538658
复制相似问题