Rails集成Trix编辑器后show页渲染HTML源码而非样式文本如何解决
问题原因&修复方案
1. 字段映射错误(核心问题)
你的Blogpost模型中声明的ActionText富文本字段为content,但表单里的富文本输入绑定的是blog_text字段,参数白名单同时保留了两个字段,导致Trix编辑器输出的HTML内容实际被存入了普通的blog_text字符串字段,没有走ActionText的富文本处理逻辑。Rails默认会转义普通字符串中的HTML特殊字符,输出时就会直接显示源码。
修正步骤:
- 修改new.html.erb中的表单字段,将富文本输入绑定到
content字段:
<%= f.input :content, as: :rich_text_area, required: true, autofocus: true, input_html: { class: "text-area-blog", autocomplete: "Blog Text" }%>
- 清理控制器中的参数白名单,删除无用的
blog_text字段:
def blogpost_params params.require(:blogpost).permit(:user_id, :blog_title, :blog_sub_heading, :photo, :content) end
- 若数据表中存在冗余的
blog_text字段,可生成迁移文件删除该字段避免后续混淆。
2. 详情页输出逻辑修正
ActionText的富文本字段自带XSS安全处理,输出时直接调用字段即可自动渲染为带样式的HTML,不需要额外添加raw或html_safe标记。将你详情页中原来输出blog_text的代码修改为:
<%= @blogpost.content %>
3. 样式适配检查(可选)
如果修改后富文本样式未生效,确认你在详情页包裹富文本内容的容器添加了trix-content类,和actiontext.scss中的样式规则匹配:
<div class="trix-content"> <%= @blogpost.content %> </div>
内容的提问来源于stack exchange,提问作者Ilia
相关产品推荐
相关产品推荐

