Rails 做个小调查,读过 Rails 源码的举一下手。

kevin__liu · 2012年06月01日 · 最后由 chucai 回复于 2012年08月20日 · 5810 次阅读

学习元编程的过程中了解到 Rails 大量使用了 Ruby 的元编程,所以想自己有一定基础后读一下 Rails 的源码,不知道大家怎么看这个问题?

其他大牛要么太谦虚了,要么是怕举手被人问问题?

半年内计划看的,也可以吼一嗓子!

看过一点 目的不是学习元编程,学习元编程的话看书是最有效的。 第一次看 rails 源码是因为想不明白 activerecord 的 lazy query 怎么实现的,看了一个通宵明白了。 还有是写插件需要了解 rails 内部的一些机制 再就是在 github 上看到某个提交的 commit 信息,感兴趣会点进去看看。

写过一段时间的人多少都要读源码的,当然能完整通读另当别论

默默的举手,真不好意思,呵呵。 个人感觉,在 Rails 2 时代,感觉读 rails 源码比较那个,到了 Rails 3,整体架构变得异常清晰易读了。

看到 ActionController::Base 部分了……第一阶段只是粗略扫一遍,之后打算做详细的笔记

一直打算看,结果还没看 只是偶尔看看某些文件...

没有完整的看,就哪里不太明白的地方会看下,看代码比看英文说明快...

rails 源码看不懂,其他的 rubygems 倒是看了不少

偶尔看一两眼,正准备好好看看。有些代码也很有趣,不知道是什么原因加进去的,很搞笑,比如一个扩展 Array 的代码如下: # Equal to self[41]. Also known as accessing "the reddit". def forty_two self[41] end

为什么加个 42 在这里,真的让人百思不得其解。这个 "the reddit" 到底是什么意思?

看到 42 我就想起生命、宇宙以及任何事情的终极答案

@outman @cantin 这个真有意思。。。

#12 楼 @outman #13 楼 @cantin Don't Panic! 《银河系漫游者指南》……

我还有件画着 Marvin 机器人的 T-shirt 来着,Marvin 幽怨的说 Don't Panic. 哈哈~

#3 楼 @hooopo 呵呵,又是元编程和 Rails 源码的话题。 我只读过一点点源码, 每当我好奇某些功能的实现机制的时候, 我就会通过 CTags 切换到 Rails 源码中,看一会。 有些功能实现的很复杂,看一会,看不完,就会需要很长时间。

建议楼主,有针对性的去阅读,这样没那么枯燥。 起初,Ruby 语法不是很熟,看源码的时候,就会很吃力, 但是,这也是一个检验自己 Ruby 语法掌握程度的机会, 当知道自己那些语法不懂后,再主动去学习 Ruby 语法, 然后再回来接着看。 反反复复一段时间,语法就不再是问题。

我觉得,当语法不再是阻碍的时候, 看 Rails 源码的时候,最大的困难就是, 有些功能的实现的逻辑比较复杂,需要有耐心,慢慢研究。

还有,最麻烦的就是, 我想进入某一个函数的时候, 我都用 CTags 在源码中 切换, 因为函数和类名经常出现重复。 感觉有些时候,很不方便,

比如:

def belongs_to(name, options = {})
  Builder::BelongsTo.build(self, name, options)
end

以上代码中我想查看 build 函数的源码, 我用 CTags 一查列出来 20 多处 build 函数的定义, 我一个一个在里面找,效率很低, 很影响节奏, 你们有什么好办法吗?你们平时都怎么看?

#16 楼 @LarryLv 我一直不知道为什么 google 翻译会把 Marvin 翻译成张建东

#17 楼 @ery gem install gem-open, gem open rails ,默认的好像是 Textmate,你可以改一下配置,或者装一个 textmate,bundle 里有一个就是干这个的。

#20 楼 @hooopo 如果不用工具, 那么能否说说, 你是用什么方法, 找到这些相关的代码的?

#21 楼 @ery 还是用 ActiveRecord::Associations::Builder::BelongsTo.build 这个例子: 根据 Ruby 的目录组织习惯,BelongsTo 这个类应该在 active_record/associations/builder/belongs_to.rb 里定义的。 进去一看,嗨,还真找到了...

还有一些继承的,去看父类或 Mixin 就可以了。Rails 做的很好了,注释里都有继承关系:

#   Association
#     SingularAssociation
#       HasOneAssociation
#         HasOneThroughAssociation + ThroughAssociation
#       BelongsToAssociation
#         BelongsToPolymorphicAssociation
#     CollectionAssociation
#       HasAndBelongsToManyAssociation
#       HasManyAssociation
#         HasManyThroughAssociation + ThroughAssociation

看了一部分,rails2 的,rails3 还没怎么看

#22 楼 @hooopo 谢谢,我明白你的方法了。 唉,我还是更喜欢工具。 喜欢那种 只要一点就定位过去的感觉。

读过一点,算没有读过吧。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号