我更新到Rails 2.3.10,Rack 1.2.1,现在我的flash消息都没有出现。我发现在重定向期间,通知会像这样传递
redirect_to(@user, :notice => "Sorry there was an error")
在我看来,flash哈希是空的
<%= debug flash %>
!map:ActionController::Flash::FlashHash {}
但您可以在控制器中看到该消息。提供什么?
<%= debug controller.session %>
session{:home_zip=>"94108", :session_id=>"xxx", :flash=>{:notice=>"Sorry there was an error"}, :user_credentials=>"1baf9c9c0423ce0151ec32e24cc422f07309e4ba503eb4830635ecc115da217809997324374bb273b3fb792895c9741a8b8c9ea4267771a1bd149de5b9179ea0", :user_credentials_id=>22, :home_market_id=>11}
Edit Profile
答案 0 :(得分:4)
您是否检查了导轨错误跟踪器?我仍然使用老式的setter flash[:notice] = message
,它工作正常,所以它似乎是一个redirect_to方法问题。
https://rails.lighthouseapp.com/
您是否尝试redirect_to url, :flash => { :notice => "notice" }
作为解决方法?
答案 1 :(得分:4)
以下代码应该有效:
redirect_to(@user, {:notice => "Sorry there was an error"})
我猜这是由于Ruby中的更改而不是Rails中的更改,因为它看起来像编译器中的令牌解析优先级更改。
答案 2 :(得分:1)
我们也碰到了这个。我们所有的Flash消息都会通过重定向消失,但不会在控制器中明确设置时消失。
不起作用:
def create
if @obj.save
flash[:notice] = "The #{cname.humanize.downcase} has been created."
redirect_back_or_default redirect_url
else
render :action => 'new'
end
end
这确实有效:
def show
@user = current_user
flash[:notice] = "Hello -- this will show up fine"
end
答案 3 :(得分:1)
这可能是cookie的问题。长话短说,如果你之后立即重定向,cookie就不会得到。假设Rails使用cookie实现flash
,重定向就是你的问题。
来源:
http://persistall.com/archive/2008/01/25/cookies--redirects--nightmares.aspx http://stackoverflow.com/questions/1621499/why-cant-i-set-a-cookie-and-redirect