Rails remote =>真正的混乱(没有format.js?)

时间:2017-01-12 19:38:19

标签: javascript ruby-on-rails ajax asynchronous

我正在尝试使用remote =>来学习如何使用rails表格上的确如此。

关于ruby on rails官方网站的以下示例让我感到困惑。即使没有" format.js"它也能很好地工作。 @user.save调用失败时的代码。

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

1 个答案:

答案 0 :(得分:0)

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

  

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

     

所以在最新版本中,我们想出了如何设置默认值,例如   它告诉服务器,“我更喜欢JS,但我会采取任何措施   你已经得到了。“现在,如果在可用的中定义了format.js   响应者格式,JS将被返回。如果没有,控制器将   然后回复列出的第一种格式。 (参见讨论主题   此处。)

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