我正在使用Rails 3.2,我有一个表单,我希望它通过ajax发布并让控制器返回json。
我正在使用form_for帮助器:
= form_for(@object, :remote => true, :format => :json) do |f|
....
我的对象控制器创建方法如下所示:
def create
respond_to do |format|
if @object.save
format.html { redirect_to @object }
format.json { render json: @object, status: :created, location: @object }
else
format.html { render action: "new" }
format.json { render json: @object.errors, status: :unprocessable_entity }
end
end
end
表单按预期提交ajaxly。但是控制器正在返回html,而不是json!
使用firebug检查请求,并确定ajax请求中的Content-Type http标头设置为application / html。
围绕这个的文档相当稀疏,:format => :json似乎只是将“.json”附加到表单操作,而不是实际修改任何http标题。
我也尝试过:content_type => :json没效果。
我不能简单地硬编码控制器来返回json,因为还有其他地方我希望它返回html ...
所以有人知道如何在使用form_for时告诉控制器渲染json吗?
感谢您的帮助
答案 0 :(得分:49)
您可以使用以下内容设置内容类型:
= form_for(@object, :remote => true, :html => {:'data-type' => 'json'})
如rails.js第106行所述。
答案 1 :(得分:3)
对于Rails 5,正确的方法是设置数据属性
data: { type: :json }
。