Ruby Rails:Flash消息不';在读取/访问之前,无法清除
我在我的一条路线中设置了下面的闪光信息Ruby Rails:Flash消息不';在读取/访问之前,无法清除,ruby,ruby-on-rails-4,flash-message,Ruby,Ruby On Rails 4,Flash Message,我在我的一条路线中设置了下面的闪光信息 def signup flash[:is_signup] = true ... redirect_to route1 : route2 // based on some logic, redirect accordingly end def route1 // access flash[:is_signup] flash.discard(:is_signup) // do something end 如上所述,设
def signup
flash[:is_signup] = true
... redirect_to route1 : route2 // based on some logic, redirect accordingly
end
def route1
// access flash[:is_signup]
flash.discard(:is_signup)
// do something
end
如上所述,设置flash变量后,我可以将_重定向到使用该flash变量的路由(route1)或根本不关心该flash变量的另一个路由(route2)
问题是,当我重定向到路由2
,然后继续处理我自己的事情,在这个过程中点击了几个路由/操作,当我最终点击路由1
时,flash变量仍然存在
我在文档中没有看到任何东西说它在阅读之前是可用的。是这样吗?还是我做错了什么
提前感谢我也看到了这一点(rails 4.2.11),并同意:没有文档表明需要访问flash
但是,如果我有一个页面设置了flash[:blah]='applesauce'
,并在下一个请求中使用了flash(例如,将flash[:blah]
),则该键在下一个请求中不存在。如果我不这样做,它会在一个又一个请求中徘徊,直到我找到一个我检查闪光灯的地方
我的解决办法是:
在应用程序中_controller.rb
class ApplicationController
这种引用flash的行为似乎足以在请求结束时触发丢弃(但不会干扰请求后面的任何实际访问)。下一个请求,它就如预期的那样消失了。我也看到了这一点(rails 4.2.11),并同意:没有文档表明需要访问flash
但是,如果我有一个页面设置了flash[:blah]='applesauce'
,并在下一个请求中使用了flash(例如,将flash[:blah]
),则该键在下一个请求中不存在。如果我不这样做,它会在一个又一个请求中徘徊,直到我找到一个我检查闪光灯的地方
我的解决办法是:
在应用程序中_controller.rb
class ApplicationController
这种引用flash的行为似乎足以在请求结束时触发丢弃(但不会干扰请求后面的任何实际访问)。下一个请求已按预期完成。我不确定是否理解,因为在动作
route1
或route2
呈现后,应该清除Flash
对象。你确定你没有把它重新分配到某个地方吗?或者您的route1
视图实际上是在设置它,而不是访问闪存本身?此外,您可能会误解FlashHash#discard
的实际功能。它不会“删除”此消息,而是在该操作结束时将其标记为丢弃。如果此操作呈现而不是重定向(“发出另一个请求”),则在发出下一个请求之前,该值仍将存在。Hey@engineersmnky我确信我不会在任何地方重新分配它。另外,在route1中,我在RHS上使用flash[:key],因此没有在RHS上分配它的问题。是的,正确地设置了丢弃对象。我不确定我是否理解,因为在动作route1
或route2
渲染后应该清除Flash
对象。你确定你没有把它重新分配到某个地方吗?或者您的route1
视图实际上是在设置它,而不是访问闪存本身?此外,您可能会误解FlashHash#discard
的实际功能。它不会“删除”此消息,而是在该操作结束时将其标记为丢弃。如果此操作呈现而不是重定向(“发出另一个请求”),则在发出下一个请求之前,该值仍将存在。Hey@engineersmnky我确信我不会在任何地方重新分配它。另外,在route1中,我在RHS上使用flash[:key],因此没有在RHS上分配它的问题。是的,把垃圾处理好了。