【问题标题】:Rails HAML View Rendering Raw HTMLRails HAML 视图渲染原始 HTML
【发布时间】:2019-06-02 18:04:26
【问题描述】:

我正在尝试使用 HAML 呈现一个简单的视图,该视图显示 JSON 对象的集合,上面有一个标题。我使用的路线是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,我之前通过与 javascript 函数绑定的简单 HTML 文本输入解决了这个问题。如何使用此端点,同时仍将 HTML 与 JSON 数据一起呈现?

【问题讨论】:

  • 如果可能,您应该使用另一条路线,例如posts_as_json,但如果您确实无法满足要求,您可以使用下面的分析器。

标签: ruby-on-rails json ruby haml


【解决方案1】:

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

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

您可以为您的渲染方法覆盖 MIME 类型:

render content_type: content_type: "text/html"

或者,如果您想同时处理来自同一个控制器操作的两个请求,您可以使用respond_to-方法:

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

【讨论】:

  • 谢谢,我会调查的。暂时我只是要传递一个查询参数进行过滤,因为这感觉更自然。如果有投诉,我会重申这一点,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 2022-10-02
  • 2022-01-01
相关资源
最近更新 更多