Rails flash:错误,:通知在重定向时丢失,但警报不会

时间:2016-10-19 03:50:54

标签: ruby-on-rails flash redirect

redirect_to的文档清楚地表明,redirect_to可以在路径之后选择闪存的:alert => "x":notice=>"x"选项,但其他任何内容都需要用于'通用目的闪存桶。'

在我的应用程序中我们经常使用flash [:error]所以我试着这样做

redirect_to root_path, :flash => {:error => "x"}

但错误未显示在重定向的页面上。

我测试时没有重定向,即在正常渲染中,flash[:error]="x"导致成功显示消息'x',因此很明显这不是视图中的问题,但这里是相关代码无论如何:

- flash.each do |name, msg|
  = content_tag :div, msg, :id => "flash_#{name}"

我还尝试过重定向之间的flash.keep,但闪存桶总是丢失。

此错误最近才浮出水面,所以看起来它可能与某些gem的升级有关 - 但是rails版本没有改变。我正在使用Rails 4.1.6

另外 - 我刚刚意识到:通知正在以类似的方式过滤掉错误,我不得不通过我的代码并替换通知:成功 - 非常困惑,我检查了动作包的gem版本,其中Flash是编码,它与以前一样工作时的情况相同

bundle exec bundle show actionpack
.....shared/bundle/ruby/2.3.0/gems/actionpack-4.1.6

3 个答案:

答案 0 :(得分:1)

你在下面试过吗?

redirect_to(root_path, {:flash => {:error => "x"}})

答案 1 :(得分:0)

实际上可以使用

redirect_to(whiteboards_path, flash: {warning: "x"} )

但不是

redirect_to(whiteboards_path, flash: {error: "x"} )

好像有了重定向,闪现的东西就会移除错误键和值,而这个东西最近才被引入某个gem或我们的代码中。

我也试过

flash[:error] = "x"
redirect_to some_path and return

哪个不起作用,但

flash[:error] = "x"
render some_template

工作正常,即错误键和值未被删除

所以这对我自己的问题来说是一个糟糕的答案,但如果没有人能提出更好的建议,我会接受它:

在重定向而不是alert: "x"时使用flash:{:error=>"x"},因为有些内容会删除闪存桶中的错误密钥val

答案 2 :(得分:0)

摘自“The Rails 4 Way”

  

“Rails 4的新功能,是使用新的ActionController :: Flash.add_flash_types宏样式方法注册自己的Flash类型的能力。”

class ApplicationController
  ...
  add_flash_types :error
end
  

“注册闪存类型时,类似于提醒和通知的特殊闪存访问器可用于redirect_to。”

redirect_to post_url(@post), error: "Something went really wrong!