纯粹 tise

经验是从磨练中积累出来的

rails 中 flash变量使用小记

rails 中的 flash 变量是一个很神奇的变量,它在 controller (控制器) 中定义,然后在下个要转向的页面中使用刚才定义的 flash 变量,然后 rails 就会把这个变量注销到。flash 变量就是在两个页面中去传递一些数据,说实在的,这比使用 cookies 和 session 好用的多。

在我现在写的项目中出现了这么一段恶心的代码


在 app/views/layouts/application.html.erb 的布局文件中迭代了 flash 这个 Hash 。

设计的初衷可能是让所有的页面都可以接收上个页面设置的信息,诸如,"某某记录更新成功","某某记录删除成功","某某记录创建成功"这样的信息,本来 flash 多数情况下都是这么拿来用。可是在著名的《敏捷开发》中也没这么教过大家吧,貌似使用的都是在 app/views/layouts/application.html.erb 中判断 flash的某个键值下面有没有值,然后再显示一些提示信息。

迭代 flash 直接的后果就是 flash 在其他地方就没办法再用用了。想象一下,我想在 controller 的某一个方法中定义一个 flash 信息且这条信息并不是一条用于提示信息,那会在你的主页上突然蹦出一条红色的长框,太他妈不爽了。只能用 cookies 临时凑活一些了。

可能你还想在一个表单的输入框的右边显示一条提示,告诉用户,你输入的问题有问题,网页一刷新,擦,主页上边,输入框右边都出现了错误提示,这也让人足够抓狂了,只能改变实现方式,不能整体刷新,只能用 ajax 去局部刷新。

这些可能都不是很大的问题,但我觉得这样的代码就是奇巧淫技,直接在 app/views/layouts/application.html.erb 中去判断某个键值下有没有数据的方式去使用 flash 的方式就很好,当想要传递一些临时的数据时,也就不用使用 cookies 或者 session 去解决。

不过没办法,当时项目写这段代码的时候我还在家里听着音乐,打着游戏。

                                                                                                                       -----小记一下。

评论