rails, 跨越三个Request的flash数据

关于flash中数据的生命周期,标准的说法是“写入flash中的数据将在下一个request处理完毕时清除”,但是如果在before_filter中将数据写入flash,则该数据的生命周期将跨越三个request,如下面的controller:
ruby 代码
 
  1. before_filter :redirect_filter:only => :test_flash  
  2. def redirect_filter 
  3.     flash[:written_by_filter]='xyz'
  4.     redirect_to :action=>:test_flash_dest and return false  
  5. end  
  6.   
  7. def test_flash  
  8. end  
  9.   
  10. def test_flash_dest  
  11. end  
测试页面 test_flash_dest.rhtml如下:
ruby 代码
 
  1. <div>flash[:written_by_filter]=<%= flash[:written_by_filter] %></div>  

我们用浏览器访问test_flash action,会被重定向到test_flash_dest并显示" flash[:written_by_filter]=xyz",这时我们刷新一下,页面上仍旧显示“ flash[:written_by_filter]=xyz”,再次刷新时才显示“ flash[:written_by_filter]=”。

我不知道这是不是rails的bug,只是第一次发现这种行为时还是吃惊了一把。猜想rails是把调用before_filter的request及redirect_to的request视作同一个request,因为将上面代码中的
ruby 代码
 
  1. flash[:written_by_filter] = 'xyz'  
改为
ruby 代码
 
  1. flash.now[:written_by_filter] = 'xyz'  
则'xyz'数据能够如我们希望的那样仅跨越两个request
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值