首页 > 解决方案 > Rails:如何在重定向时保留对象错误

问题描述

我正在开发一个维护不善的混蛋 Rails 应用程序。我在 Rails 上有一个更新操作,对于成功和不成功的更新都涉及重定向(不是渲染),因为路由搞砸了,我无法轻松输入渲染“编辑”(我认为这会保留错误)。

有没有办法让我将对象错误持久化到视图中以将它们显示为表单上的错误?因为就表单而言,在视图的重定向上,错误不存在。它看起来像这样:

      complex_path = "/path_name/path_2name/edit/#{@product.id}"
      if @product.update(part1_params)
        flash[:notice] = completion_message
        format.html { redirect_to complex_path
 and return }
      else
        flash[:notice] = "Unable to save Product. "
        format.html { redirect_to complex_path and return }
      end

标签: ruby-on-railsredirectcontroller

解决方案


嗯,这有点 hacky,但您可以在 Flash 哈希上使用自定义键。

else
  @product.errors.keys.each do |err_key|
    flash[err_key] = @product.errors.full_messages_for(err_key).join(' ')
  end
  flash[:alert] = 'Unable to save Product.'
  redirect_to ....
end

现在,对于下一个请求,您可以迭代flash.keys以获取错误(您应该忽略 :alert o :notice 键)。

真的很丑,但是save失败后重定向更丑所以.... ;P


推荐阅读