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文档