纯粹 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 去解决。

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

                                                                                                                       -----小记一下。

借你爱情

Sapphire:

爱情是从什么地方开始的?是从第一眼开始的吗?是从寂寞开始的吗?是从失意开始的吗?是从嘴巴开始的吗?是从肩膀开始的吗?是从互相讨厌开始的吗?是从身体开始的吗?也许,以上一切都不是真正的开始。爱情是从希望开始的。第一次遇上你,你在我心里燃起了希望的火光。—— 张小娴《相逢》

感谢骆骆独秀的投稿 :)

网站挂掉--小记

晚上的时候,听人说官网挂了,马上登录了网站发现500错误。 ping 了一下服务器,能够 ping 通,初步估计是 unicorn 出问题了。

由于没有服务器权限,只能等组长回来才能解决问题。

组长回来,登录服务器,发现是添加了一个 gem,还有一个文件中多打了一个 ")",虽然不是什么大错误,但 unicorn 没有启动起来,使网站挂掉了。

但组长强调了两点,让我印象很深。

首先不要在项目中随便添加 gem,现在 gem 的质量参差不齐,现在用的 gem 将来没人维护了谁来维护?gem 出问题了,谁来解决?

代码要测试好了才能提交到服务器上,本地不能跑起来怎么能够提交到服务器。--我感觉组长说的很有道理,服务器就是用来跑程序的,不是用来调试程序的。服务器只负责来跑,调试好的代码才能提交到服务器。

组长强调的这两点很赞同。

gem 真的是不能随便添加,有些 gem 的维护工作很繁琐,个人的力量维护起来很困难,公司的项目会存在很长时间,gem 可能会出各种问题,出了问题谁去解决,谁去维护,组长还说,即使一个功能严重依赖一个 gem ,如果这个 gem 不稳定,那就算项目砍掉这个功能也不去使用这个 gem,因为将来的维护会非常困难。

写在这里,以此铭记。

当所有人都把欲望当理想,把世故当成熟,把麻木当深沉,把怯懦当稳健,把油滑当智慧,那只能说这个社会的底线已被击穿,所以你们没有资格说我的勇敢是莽撞,执着是偏激,求真是无知,当那些兜售社会经验的流氓朝我的梦想投来轻蔑一笑的时候,我会毫不犹豫的还你一句,sb!---白岩松

devise bootstrap 同用小坑

devise 2.1 发布了,今天在一个新项目中用上了,但是出现了一点意想不到了的小 BUG。

开始安装 devise ,使用 rails generate devise:install


会出现提示,让我们配置一些代码,其中第三条就是那个小坑,相信大家对 bootstrap 已经不陌生了,项目中也已经用上了。

但 <p class="alert"></p> 会出现问题


<p class="alert"></p> 会总是出现,因为 bootstrap 就是利用给元素增加类名来实现漂亮的样式。

devise 以前的版本用的是一个插件来提示,现在改成了自己去实现,感觉还是挺好的,不过初衷虽好,出现了小问题也不是他们所希望看到了,解决起来也不是很复杂,只要增加一句条件判断就可以把这个小问题解决掉了。


昨天这个小问题也苦恼了我一段时间,我的同事帮我解决了这个小问题。谢谢他。

更新,经高人指点,发现这种方式更简洁,不过需要在 application_helper.rb 中定义一个方法

def notice_message flash_messages = [] flash.each do |type, message| if message type = :success if type == :notice html = <<-HTML <div class=\"alert fade in alert-#{type}\"> <a class="close" data-dismiss="alert"><i class="icon-remove"></i></a> #{message} </div> HTML flash_messages << html end end flash_messages.join("\n").html_safe end

还要把

<%= notice %> <%= alert %>

换成

<%= notice_message %>

两种方法都能解决掉这个小 BUG,具体哪种方法更好,看大家喜欢哪一种吧

附赠高人的 github https://github.com/jasl/start_up/blob/master/app/helpers/application_helper.rb

你若在我身旁,战死沙场又何妨

你若在我身旁,战死沙场又何妨

我若在你心上,敌军三千又怎样

                        --诗文好凄凉

万恶的 IE -- bootstrap 使用中的坑

bootstrap 中的 modal 特效用的很舒服,而且很霸气,但在一个小项目中的使用中遇到了 IE 给挖的坑了,现在想想,太恶心了。

本来在编辑器里复制这样的代码

<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h3 id="myModalLabel">Modal header</h3> </div> <div class="modal-body"> <p>One fine body…</p> </div> <div class="modal-footer"> <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button> <button class="btn btn-primary">Save changes</button> </div> </div>

然后把相应的地方改成项目中需要用到的代码就完事了。

在 IE 9 中使用 rails 的 remote => true 这样默认的 请求时会出现问题。表单是没办法正常发送的。我和我们的神前端用了半天的时间把他搞定了。居然是因为表单包在了 div.modal-body

里面,然后无法正常解析出按钮。太让人郁闷了。我们的神前端啊,这样的问题让我去找估计还要再修炼500年。

不过 IE 真是恶霸,这么简单的事情都要折腾一下你。现在我怀疑微软的 IE 部门是不是一群笨蛋,IE 8中这样是使用时是没有问题的,升级的 IE 9 版本居然不兼容。没办法,比尔不在管理微软了,要在前几天他一定会开了那群笨蛋。

以此铭记,加以小心。