Trix 富文本编辑器在 new.html.erb 中工作,但在 show.html.erb 视图中呈现代码而不是样式文本(在浏览器中显示)
Trix Rich Text Editor works in new.html.erb but renders code in show.html.erb view instead of styled text(display in browser)
我有一个奇怪的问题。
我最近在我的 Rails 应用程序中安装了 Trix。一切都很顺利,直到我尝试发布一篇博文,发现像 strong> 和 div> 这样的 html 元素被作为实际文本包含在内(因此没有样式出现)。
还有其他人遇到过这个问题吗?我很确定我的设置与 this
非常相似
用一张图片来描述我的观点:
需要说明的是,该图片是用户会看到的其中一张卡片的放大屏幕截图(因此它的样式应该...不在该实际视图中输出 html)
这是我的设置
actiontext.scss
@import "trix/dist/trix";
.trix-content {
.attachment-gallery {
> action-text-attachment,
> .attachment {
flex: 1 0 33%;
padding: 0 0.5em;
max-width: 33%;
}
&.attachment-gallery--2,
&.attachment-gallery--4 {
> action-text-attachment,
> .attachment {
flex-basis: 50%;
max-width: 50%;
}
}
}
action-text-attachment {
.attachment {
padding: 0 !important;
max-width: 100% !important;
}
}
}
application.scss
@import "actiontext";
我的 new.html.erb 中的样式有效,但发布时未显示上述样式。
继续
我的表格,
new.html.erb
<div class="page-content-area">
<h1>Create a Blogpost</h1>
<h2>Fill in the details below</h2>
<%= simple_form_for [@blogposts] do |f| %>
<%= f.input :blog_title,
required: true,
autofocus: true,
input_html: { autocomplete: "Blogpost Title" }%>
<%= f.input :blog_sub_heading,
required: true,
autofocus: true,
input_html: { autocomplete: "Blogpost Sub Heading" }%>
<%= f.input :blog_text,
as: :rich_text_area,
required: true,
autofocus: true,
input_html: { class: "text-area-blog", autocomplete: "Blog Text" }%>
<%= f.input :photo,
autofocus: true,
as: :file %>
<%= f.submit "CREATE", class: "btn btn-primary" %>
<% end %>
</div>
application.js
require("trix")
require("@rails/actiontext")
博文管理员
def new
@blogposts = Blogpost.new
end
def create
@blogposts = Blogpost.new(blogpost_params)
@blogposts.user = current_user
if @blogposts.save!
redirect_to blogpost_path(@blogposts)
else
render 'new'
end
end
private
def blogpost_params
params.require(:blogpost).permit(:user_id, :blog_title, :blog_sub_heading, :blog_text, :photo, :content)
end
博文模型
class Blogpost < ApplicationRecord
belongs_to :user
has_rich_text :content
end
如果您需要我展示任何其他内容,请随时告诉我!
感谢您的宝贵时间!
您如何在视图中呈现 blog_text
字段?通常从用户内容呈现 HTML 是受限制的(以避免反对 XSS/etc)。您可以使用 .html_safe
告诉 rails 不要转义 html 标签。参见 raw vs. html_safe vs. h to unescape html
所以我意识到我的错误。
而不是
class Blogpost < ApplicationRecord
belongs_to :user
has_rich_text :content
end
应该是
class Blogpost < ApplicationRecord
belongs_to :user
has_rich_text :blog_text
end
因为在我的应用程序中,我在我的架构和表单中将该列命名为“blog_text”。
我过于严格地遵循了教程,没有将它与我的架构联系起来。
我有一个奇怪的问题。
我最近在我的 Rails 应用程序中安装了 Trix。一切都很顺利,直到我尝试发布一篇博文,发现像 strong> 和 div> 这样的 html 元素被作为实际文本包含在内(因此没有样式出现)。
还有其他人遇到过这个问题吗?我很确定我的设置与 this
非常相似用一张图片来描述我的观点:
需要说明的是,该图片是用户会看到的其中一张卡片的放大屏幕截图(因此它的样式应该...不在该实际视图中输出 html)
这是我的设置
actiontext.scss
@import "trix/dist/trix";
.trix-content {
.attachment-gallery {
> action-text-attachment,
> .attachment {
flex: 1 0 33%;
padding: 0 0.5em;
max-width: 33%;
}
&.attachment-gallery--2,
&.attachment-gallery--4 {
> action-text-attachment,
> .attachment {
flex-basis: 50%;
max-width: 50%;
}
}
}
action-text-attachment {
.attachment {
padding: 0 !important;
max-width: 100% !important;
}
}
}
application.scss
@import "actiontext";
我的 new.html.erb 中的样式有效,但发布时未显示上述样式。
继续
我的表格, new.html.erb
<div class="page-content-area">
<h1>Create a Blogpost</h1>
<h2>Fill in the details below</h2>
<%= simple_form_for [@blogposts] do |f| %>
<%= f.input :blog_title,
required: true,
autofocus: true,
input_html: { autocomplete: "Blogpost Title" }%>
<%= f.input :blog_sub_heading,
required: true,
autofocus: true,
input_html: { autocomplete: "Blogpost Sub Heading" }%>
<%= f.input :blog_text,
as: :rich_text_area,
required: true,
autofocus: true,
input_html: { class: "text-area-blog", autocomplete: "Blog Text" }%>
<%= f.input :photo,
autofocus: true,
as: :file %>
<%= f.submit "CREATE", class: "btn btn-primary" %>
<% end %>
</div>
application.js
require("trix")
require("@rails/actiontext")
博文管理员
def new
@blogposts = Blogpost.new
end
def create
@blogposts = Blogpost.new(blogpost_params)
@blogposts.user = current_user
if @blogposts.save!
redirect_to blogpost_path(@blogposts)
else
render 'new'
end
end
private
def blogpost_params
params.require(:blogpost).permit(:user_id, :blog_title, :blog_sub_heading, :blog_text, :photo, :content)
end
博文模型
class Blogpost < ApplicationRecord
belongs_to :user
has_rich_text :content
end
如果您需要我展示任何其他内容,请随时告诉我!
感谢您的宝贵时间!
您如何在视图中呈现 blog_text
字段?通常从用户内容呈现 HTML 是受限制的(以避免反对 XSS/etc)。您可以使用 .html_safe
告诉 rails 不要转义 html 标签。参见 raw vs. html_safe vs. h to unescape html
所以我意识到我的错误。
而不是
class Blogpost < ApplicationRecord
belongs_to :user
has_rich_text :content
end
应该是
class Blogpost < ApplicationRecord
belongs_to :user
has_rich_text :blog_text
end
因为在我的应用程序中,我在我的架构和表单中将该列命名为“blog_text”。
我过于严格地遵循了教程,没有将它与我的架构联系起来。