2014-11-01 37 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