Rails remote => true confusion(没有format.js?)

我正在尝试学习如何在窗体上使用带有remote => true的rails。

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格式不可用。 我在这里缺少什么?

我找到了我在IRC上寻找的答案。 答案来自https://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/ :

较新版本的UJS驱动程序只是将jQuery的默认数据类型保留为“/”。 这告诉服务器,“给我任何你得到的东西。” 但是,这会使控制器以响应者中列出的第一种格式进行响应(请参阅下一节)。 因此,如果format.html在format.js之前列出,则应用程序将响应HTML响应(这意味着它将尝试重定向POST或DELETE方法AJAX请求)。 这也不理想。

所以在最新的版本中,我们想出了如何设置默认值,这样就告诉服务器,“我更喜欢JS,但我会接受你所拥有的任何东西。” 现在,如果以可用的Responder格式定义format.js,则将返回JS。 如果没有,控制器将以列出的第一种格式进行响应。 (参见此处的讨论主题。)

讨论主题: https : //github.com/rails/jquery-ujs/issues/74