Rails 3远程表单:如何指定内容类型?

时间:2012-03-06 12:05:49

标签: ruby-on-rails ajax ruby-on-rails-3 forms ujs

我正在使用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吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:49)

您可以使用以下内容设置内容类型:

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

rails.js第106行所述。

答案 1 :(得分:3)

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

JQuery UJS docs