Rails HAML视图呈现原始HTML

时间:2019-06-02 18:04:26

标签: ruby-on-rails json ruby-on-rails-5 haml

我正在尝试使用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文本输入所解决的。在仍然与JSON数据一起呈现HTML的同时,如何使用此端点?

1 个答案:

答案 0 :(得分:3)

问题是,如果您请求.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