Rails 3的远程表单:如何指定内容types?

我正在使用Rails 3.2,我有一个窗体,我希望它通过ajax发布,并有控制器返回json。

我正在使用一个form_for helper像这样:

= form_for(@object, :remote => true, :format => :json) do |f| .... 

我的对象控制器创build方法如下所示:

  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 

表单正在按预期提交。 但控制器正在返回HTML,而不是JSON!

使用萤火虫检查请求,并确保ajax请求上的Content-Type http标题被设置为application / html。

关于这个的文档是非常稀疏的::format =>:json似乎只是将“.json”附加到窗体动作,而不是实际上修改任何http头。

我也试过:content_type =>:json不起作用。

我不能简单地硬编码控制器返回JSON,因为有其他地方我希望它返回HTML …

那么有没有人知道如何告诉控制器使用form_for时呈现json?

谢谢你的帮助

您可以使用以下内容设置内容types:

  = form_for(@object,:remote => true,:html => {:'data-type'=>'json'}) 

如在rails.js第106行中所述。

对于Rails 5,正确的方法是设置一个数据属性data: { type: :json }

JQuery UJS文档