在javaeye上边看到了一个帖子,一个哥们儿(http://liuqiang.javaeye.com/) 提出了:如何同时提交多个model并且“失败全不存,成功全存”,其实就是典型的transaction场景,并且给出了几个解决方案,最后作者给出了其认为最好的一个解决方法,其核心代码就是通过:unless [@user, @city, @order].map(&:valid?).include?(false) 的语句判断三个模型是否都通过验证,没有的话返回。
怎么说呢,这个方法应该说还是不错的,看上去比较简洁。但是看到的第一眼就感觉有点不对劲:为什么不用transaction? 呵呵,跟帖中马上有人有同样的意见,不过他给出的解决方案确实和我所想想的不一样,是更优雅,看到的第一眼就想到了2年前使用spring的transaction方法,同时也让用了快两年rails的我知道了 around_filter原来是这么用的,呵呵,张见识。代码已经记录下来了,在这里。
最近在和朋友共同做一个项目(当然是rails项目),每个人分别负责几个功能模块。我们使用的是Rails2.1,项目的框架是那个哥们搭的,我加入之前简单看了一下整体的代码,由于还处在很初级的阶段所以代码比较简单,至于plugin,我就是打开vender/plugin简单的扫了一眼。随着项目的进行,发生了一些比较奇怪的事情,所有的**_id字段都被添加成为了foreign_key,我的第一直觉是:”难道rails新版本中添加了这个功能?但是没看到任何的地方提起啊!”于是乎又翻看了rails2.1的新功能 feature list,还是没有找到任何相关的信息。这个时候脑子不知怎么就这么死,不知道看看是不是plugin的问题,结果硬是分别测试了1.2.6,2.0.2 和2.1.0的migration,都没有发现自动添加fk的问题,这个时候才恍然大悟,打开了plugin目录,赫然看到了foreign_key_migrations。这个时候一切都明朗了:都是plugin搞得鬼。
吃东西得趁热,学rails也不例外,chinaonrails的一个帖子将大家的积极性调动了起来,我也献了自己的一份力量,翻译了第二章 ActiveRecord,基本完成,明天还要修改一些细节。国内rails的社区力量还是很强很可爱的。
最近获得了好多的关注,作为tech“潮人”咱自然不能落后,看了几天,学习了不少有用的知识, 简单的谈谈使用git的过程.注册github.com帐户之类的废话就不用说了.这里我以自己下载、学习 rails-openid-kit 为例, 总结一下我使用github,并且为开源软件贡献一点力量的过程(顺便提一句,如果你希望为你的网站添加openid支持,那么openid-rails-kit是一个很好的选择)
在github上边找到openid-rails-kit,然后 “fork”
这个时候网站会跳转到你自己的页面,然后在你自己的帐户中copy一份openid-rails-kit项目的源代码,所以“fork”说白了就是,copy一份项目的代码,你对这份代码拥有一切权利,当然,这份fork过来的代码也会保留一切之前的log/change history .这时候你会看到 public clone url , your clone url的字样,很明显,一个是给所有人的只有读权利的地址,一个是你自己用的可以提交更改的地址。当地点击 Your clone url时候一行命令会蹦出来,copy之。
这时回到我本地,打开iterm, paste
当然了再下一步就是打开textmate,一通改。这时候你也许在纳闷,我的这个版本和原作者的版本有什么区别,我改了会不会对原作者的版本产生任何的影响呢,如果我提交了我的更改那么别人是否能够看到我都改了什么呢?呵呵,会有影响也可能没有影响,不过如果你提交了你的更改,在git里边通过git push来提交,那么所有关注这个项目的人都可以看到你的更改,过一会我们会具体演示别人怎么看到你的更改,你怎么看到别人的更改。当然了如果你使用textmate,那么git tmbundle 以及 github tmbundle 都是使用git必备的。
在git当中branch的概念无处不在,同时branch的创建, switch, delete都是非常的cheap。 我们刚刚通过git clone 生成的project 其实就是一个叫”master”的branch,我们用”master”来引用这个存储在本地的branch. 这个branch对应着你在github上的master branch,不过对于那个remote master branch,我们习惯用 origin/master来表示,origin可以认为是我们给remote repository起的一个别名. 同时当我运行 git branch new-features 的时候,git 又以我现在所在branch(master)为基础,创建了一个新的名叫new-features的branch, 通过git checkout new-features, 我们很轻松的就由master转到了new-features这个branch. 接下来就是可以放心大胆的添加我们的新功能,而不用担心破坏了master的功能。
ok, 现在我们添加了新的功能,同时所有的新功能通过了测试,现在我们准备将新功能merge到master当中了。首先确认你已经提交了所有对于new-features branch的更改: (new-features branch) git commit -a -m ‘commit all my [...]
本想于上周放出railshow中文播客网站,结果由于突然有一堆工作,所以不得不再次推迟,不过有一些screencast是已经录制好的,所以在这里提前放出。这段screencast主要和大家分享一个我平时经常使用的default layout模板,由于感觉这个模板还是比较不错的,对于初学rails的朋友有一定的学习价值,同时有经验的朋友也可以作为best practise 来分享。
Download here
31 May
Posted by: snow in: Uncategorized
After I release the chinese version screencast yesterday, many friends sent me advices. Today, I recorded it again with english so that more people can see and understand it.
The attached file is a screencast of how to build a youtube-like video sharing web application using activemessaging plugins and how to backup the files into amazon [...]
几个星期前就有录一段视频文件的想法了,但是由于懒惰总是给自己找借口,今天终于讲近期的一些项目经验加以总结然后做了一个demo,并且制作了一个screencast.附件中是demo的source code,简单来说就是一个接收用户上传的video文件,然后通过异步的方式交给后台processor 进行视频转换成flv格式,并且把该flv文件上传到 Amazon s3上。
你可以下载 screencast 和source code
欢迎大家多提意见