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
答案 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!