Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Rails:Flash消息不';在读取/访问之前,无法清除_Ruby_Ruby On Rails 4_Flash Message - Fatal编程技术网

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上分配它的问题。是的,把垃圾处理好了。