2017-01-12 62 views
0

我想學習如何在窗體上使用rails => true。Rails remote => true confusion(no format.js?)

下面的ruby on rails官網上的例子讓我感到困惑。即使在@user.save調用失敗時沒有「format.js」代碼,它也可以正常工作。

# app/controllers/users_controller.rb 
# ...... 
def create 
    @user = User.new(params[:user]) 

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

我期待錯誤響應,因爲js格式不可用。我在這裏錯過了什麼?

回答

0

我找到了我在IRC上尋找的答案。答案是從https://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/:在UJS驅動

新版本只是離開「/」 jQuery的默認 數據類型。這告訴服務器,「給我任何你有的。」 但是,這會使控制器以響應程序中列出的第一種格式 響應(請參閱下一節)。因此,如果 format.html在format.js之前列出,則應用程序將以 HTML響應(這意味着它將嘗試重定向POST或刪除 方法AJAX請求)作出響應。這也不是理想的。

所以在最新的版本中,我們想出瞭如何設置默認,這樣 它告訴服務器,「我寧願JS,但我會採取任何 你已經有了。」現在,如果在可用的 Responder格式中定義了format.js,則將返回JS。如果不是,控制器將 然後以列出的第一種格式進行響應。 (參見話題 這裏。)

話題:https://github.com/rails/jquery-ujs/issues/74

相關問題