【问题标题】:RoR: Creating/Updating: Showing validation errors while preserving previous valuesRoR:创建/更新:在保留先前值的同时显示验证错误
【发布时间】:2008-10-01 15:51:58
【问题描述】:

我有一个基本模型,我在其中指定了一些字段来验证其存在。在控制器的创建操作中,我执行标准:

@obj = SomeObject.new(params[:some_obj])

if @obj.save
  flash[:notice] = "ok"
  redirect...
else
  flash[:error] = @obj.errors.full_messages.collect { |msg| msg + "<br/>" }
  redirect to new form
end

但是,当我重定向到新表单时,会显示错误,但字段为空。有没有办法用输入的值重新填充字段,以便轻松纠正错误?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    render :action =&gt; :new 而不是重定向。

    【讨论】:

    • 这样做的原因是为了让你将对象保存在内存中,而不是创建一个新对象;重定向会启动一个全新的请求。
    • 缺点是创建 SomeObject 的表单现在有两个 URL: /some_objects/new # 用于第一个表单 /some_objects # 在失败的 POST 之后 对此无能为力。
    【解决方案2】:

    在闪存哈希中也捕获@obj,然后在new 操作中检查它。

    @obj = SomeObject.new(params[:some_obj])
    
    if @obj.save
      flash[:notice] = "ok"
      # success
    else
      flash[:error] = @obj.errors.full_messages.collect { |msg| msg + "<br/>" }
      flash[:obj] = @obj
      # redirect to new form
    end
    

    new:

    @obj = flash[:obj] || MyClass.new
    

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多