Rails 5.1 脚手架创建方法 returns 状态 200 失败

Rails 5.1 scaffolded create method returns status 200 on failure

在为控制器使用 rails 5.1.4 脚手架时,我看到在 #create 方法中处理保存失败的默认方法是再次呈现 #new(使用状态 200).

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

HTML 响应不像 JSON 版本那样呈现 422 有什么充分的理由吗?

这是一个问题的原因是它使得在集成测试中测试响应代码变得困难(即验证错误与否 #create 方法将 return 200) .

最有可能的原因是,从历史上看,大多数浏览器并不倾向于理解很多 HTTP 代码——它们只处理一些非常简单的代码。我认为他们大多只是丢弃他们不理解的。

但是您没有理由不更改创建以发送最合适的 HTTP 响应代码并开始使 Web 成为一个更好的地方,一次一个网站:)