2007-06-21
rails, 跨越三个Request的flash数据
关键字: ruby rails
关于flash中数据的生命周期,标准的说法是“写入flash中的数据将在下一个request处理完毕时清除”,但是如果在before_filter中将数据写入flash,则该数据的生命周期将跨越三个request,如下面的controller:
测试页面 test_flash_dest.rhtml如下:
我们用浏览器访问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,因为将上面代码中的
改为
则'xyz'数据能够如我们希望的那样仅跨越两个request
ruby 代码
- before_filter :redirect_filter, :only => :test_flash
- def redirect_filter
- flash[:written_by_filter]='xyz'
- redirect_to :action=>:test_flash_dest and return false
- end
- def test_flash
- end
- def test_flash_dest
- end
ruby 代码
- <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 代码
- flash[:written_by_filter] = 'xyz'
ruby 代码
- flash.now[:written_by_filter] = 'xyz'
发表评论
最近加入圈子
最新评论
-
dwr作为数据源的extjs gr ...
:D :) :( 引用
-- by qqggcc -
Acegi中的FilterInvocati ...
能具体介绍一下用法么?该怎么配置?
-- by godson_2003 -
dwr作为数据源的extjs gr ...
这样在grid 点击列的排序问题怎么解决呢 ??
-- by sariy -
dwr作为数据源的extjs gr ...
不知道有没有关于tree的方案?
-- by kaki -
Acegi中的FilterInvocati ...
请问一下!我的requestMap为什么一直都是空值啊?
-- by hunter0116







评论排行榜