Rails HAML 视图渲染原始 HTML

Rails HAML View Rendering Raw HTML

我正在尝试使用 HAML 呈现一个简单的视图,该视图显示 collection 的 JSON objects 和上面的 header。我使用的路线是get 'posts.json', to: 'posts#posts_as_json'。这将呈现以下视图。

posts_as_json.haml

%h1 Posts As JSON
%div.gutter-spacing
  =raw(@posts)

我 运行 遇到的问题是页面将呈现原始 HTML 标签以及 JSON 本身。我一直在试图找出问题所在,并且根据一些实验,我认为这与在我的路由中使用 .json 直接相关。如果我删除它,它似乎会按预期呈现 HTML 。更新:这绝对是 issue

的根

使用路由 'posts.json' 是我的项目的要求,但我需要能够搜索已解析的 JSON 以及我之前用简单的 HTML 解决的问题绑定到 javascript 函数的文本输入。如何在 HTML 与 JSON 数据一起呈现的同时使用此端点?

问题是,如果您请求 .json 格式,rails 将自动尝试将其作为具有相应 MIME 类型的响应发送 application/json

现在浏览器收到他认为应该是 JSON 的响应,因此将其呈现为文本。

您可以覆盖呈现方法的 MIME 类型:

render content_type: content_type: "text/html"

或者如果你想从同一个控制器操作中处理两个请求,你可以使用 respond_to-method:

def index
  @posts = Post.all
  respond_to do |format|
    format.html { render }
    format.json { render 'index_as_json.html', content_type: "text/html" }
  end
end