为什么在成功提交并返回后,表单上会出现验证错误?

时间:2014-07-18 12:42:42

标签: ruby-on-rails google-chrome form-submit back-button validationerror

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

  1. 发布导致验证错误的表单(即“名称不能为空”)
  2. 通过更正输入
  3. 成功发布相同的表单
  4. 点击浏览器后退按钮,输入字段显示步骤1中的验证错误,即使它的值不为空
  5. 为什么第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)
    

1 个答案:

答案 0 :(得分: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”。


资源: