我正在尝试使用HAML渲染一个简单的视图,该视图显示上面带有标头的JSON对象的集合。我使用的路线是get 'posts.json', to: 'posts#posts_as_json'
。这将呈现以下视图。
%h1 Posts As JSON
%div.gutter-spacing
=raw(@posts)
我遇到的问题是页面将呈现原始HTML标记以及JSON本身。我一直在尝试找出问题所在,并且根据一些实验,我认为这与在路由中使用.json
直接相关。如果我删除它,似乎可以按预期呈现HTML。更新:这绝对是issue
使用路线'posts.json'
是我的项目的要求,但是我还必须能够搜索已解析的JSON,这是我先前使用与javascript函数绑定的简单HTML文本输入所解决的。在仍然与JSON数据一起呈现HTML的同时,如何使用此端点?
答案 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