2014-11-01 76 views
0

我有一个表格,我通过AJAX提交,所以从服务器的预期响应格式是JavaScript。问题是我不能像这样进行验证工作。通常我会做它,就像这样:如何在AJAX提交后验证表单?

# POST /cats 
    # POST /cats.json 
    def create 
    @cat = Cat.new(cat_params) 

    respond_to do |format| 
     if @cat.save 
     format.html { redirect_to @cat, notice: 'Cat was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @cat } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @cat.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

但现在我有这样的情况:

# POST /cats 
    # POST /cats.json 
    def create 
    @cat = Cat.new(cat_params) 

    respond_to do |format| 
     if @cat.save 
     format.js { } 
     else 
     format.js { ????? } 
     end 
    end 
    end 

我创建create.js.erb该做的一切所需的内容对我来说,如果新的对象被保存,但如果对象没有保存,我不知道如何处理验证显示。在我的表单里面,如果我不使用AJAX,我可以使用它:

<% if @cat.errors.any? %> 
    <div id="error_explanation"> 
     <ul> 
     <% @cat.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

我该怎么办?我使用Rails 4

回答

4

在你create.js.erb可以再次unless @cat.persisted?呈现形式。

  1. 以另一个部分的形式为例,例如'_form.html.erb'。

  2. 如果你的表格是ID为 “my_form_div” 一个div里面,

那么create.js.erb

<% if @cat.persisted? %> 
    # code for success save 
<% else %> 
    $('#my_form_div').html('<%= escape_javascript(render('form')) %>'); 
<% end %> 

这将与错误一起再次渲染整个表单。如果您不想再次呈现完整表单,则只能针对错误div执行相同操作。

+0

谢谢!有用! – Bosquets 2014-11-01 23:23:43

2

可以渲染在这两种情况下成功和失败create.js.erb和你create.js.erb文件检查是否@ cat.errors.any?如果是这样的话,你可以写一些jQuery并在html中注入错误,如果不是像以前那样在成功场景中进行处理的话。

示例代码来说明我的意思EX:

def create 
    @cat = Cat.new(cat_params) 

    respond_to do |format| 
    @error = @cat.save 
    // or you can use if if you need more in success case to be done before rendering 
    format.js {} 
    end 
end 

在你create.js.erb ::

<% if @error %> 
    // loop over errors like your working code in the case of html request 
<% else %> 
    // success scenario 
<% end %> 
+0

谢谢!你能告诉我一个小提示如何在html中注入错误吗? – Bosquets 2014-11-01 23:19:06

+1

好的,你知道如何使用jQuery吗? - 无论是最简单的方法就是把你上面的代码最后程序 - 失败案例 - 在这个问题的部分文件,然后写$(“#id_of_error_div”)HTML('<%= j的渲染‘your_partial_form’% >') – 2014-11-01 23:19:56