1

我正在使用 Rails 4 和 Chrome。结果如下:

  1. 发布导致验证错误的表单(即“名称不能为空”)
  2. 通过更正输入成功发布相同的表格
  3. 点击浏览器后退按钮,步骤 1 中的验证错误会显示在输入字段中,即使它的值不为空

为什么步骤 1 中的验证错误会弹出以及如何解决此问题?注意:Turbolinks 正在使用中,可能是这个原因吗?

以下是复制的方法:

rails g scaffold Page name:string

class Page < ActiveRecord::Base
  validates :name, presence: true
end
Navigate to /pages/new
Submit (errors appear on the form)
Fillout the name
Submit again (redirected to successfully created model)
Hit the browser back button (the validation errors are there, and the field is filled with the last supplied value)
4

1 回答 1

1

我猜您正在使用类似以下代码的代码来发回与正在创建/更新的记录相关的错误:

def update
  @post = Post.find(params[:id])
  if @post.update_attributes(post_params)
    # your logic when successfull
  else
    render :edit, flash[:errors] = @post.errors
  end
end

或类似的东西。我的观点是,您应该使用以下语法来设置错误flash

flash.now[:errors] = @post.errors

(1)这应该设置flash[:errors] 仅适用于当前页面,并在您离开此页面后立即将其删除。

(2)您也可以flash.clear在视图的末尾使用,但这不是应该这样做的,而且看起来有点“hacky”。


资源:

于 2014-07-18T13:56:17.167 回答