我是一名熟悉Ruby的PHP开发人员。我想学习Ruby on Rails,但是我遇到的大部分资源都将RoR功能视为“神奇” - 即它具有一定的内部一致性,但是不要问它是如何工作的, MySQL等等。
无论如何,我想深入了解RoR的工作原理,构建它的设计决策等等。特别是我对ActiveRecord感兴趣,但我真的在寻找整个包。
欢迎任何书籍/网站/建议。
答案 0 :(得分:22)
“使用Rails进行敏捷Web开发”和“The Rails Way”这些书都非常好。 “Active Active Record”对于Active Record来说非常深入,但是并没有触及太多其他内容。播客Railscasts有时只使用魔术,但有时它会解释实际发生的事情。诸如Art of Mission之类的各种博客都可以进入您所寻找的目标。
此外,使用ruby-debug gem可以更好地了解正在发生的事情 - 您可以进入幕后运行的场景。
答案 1 :(得分:13)
这里有两个区域可以单独检查:
一般概念(包括设计模式,一般态度原则,如DRY和CoC,甚至敏捷等),因为它们是Rails中许多设计决策背后的原则。任何这些概念都可以独立于Rails进行研究(因为它们是通用编程概念)。在深入挖掘之前,至少要对这些有一些了解是很好的。网上有很多关于这些一般原则的消息来源(前面提到的Martin Fowler网站是掌握这些概念的更好资源之一)。
Rails将这些概念实现到其语料库中的方式。这里有两件事要记住。由于Rails大量使用其母语的特性,因此理解Ruby的特性(例如mixins和大量Ruby的动态特性)至关重要。最后要理解的是如何 Rails使用这些功能,即。它如何分解为类和模块,在运行中动态创建了多少功能等等。为此,我强烈推荐David A. Black的书籍Ruby for Rails(这完全是关于Ruby,它的特点和Rails使用它们的方式)。虽然这本书可能有点过时,但我认为它的内容仍然非常宝贵。
答案 2 :(得分:9)
如果您真的想知道它是如何工作的,您可以查看源代码。 online API docs让您可以在文档页面中看到每种方法的源代码。
Rails中的ActiveRecord基于Martin Fowler的Active Record pattern。它基本上是一个ORM(对象关系映射器)。就ORM而言,它甚至都不是那么复杂。 Java Persistence with Hibernate对常见的ORM概念有很好的概述。
答案 3 :(得分:7)
这个也适合这里 - > http://railsforphp.com/
答案 4 :(得分:5)
这是对你的问题的一个切向答案,但我也是从PHP开发到Ruby / Rails dev,这对我来说是一个很大的转变。作为PHP开发人员,我们已经习惯于深入了解细节,发言,并且不会被阻止在内心深处。
按照设计,Rails是一个黑盒子。你应该学习Rails,几乎就像语言一样。这是一种思考web开发的新方式,特别是从PHP开发的角度来看,尽管这种想法在编程时并不罕见。
不必费心去看看引擎盖可能是开始做事的最佳方式“Rails方式。”
答案 5 :(得分:5)
Jamis Buck在他的Under the Hood上有一系列很好的“blog”文章,涵盖了Rails内部的某些方面。
答案 6 :(得分:4)
我发现这个网站是一个很好的起始参考:
http://www.tutorialspoint.com/ruby-on-rails-2.1/index.htm
它在其示例中假设MySQL。
我相信你可以通过谷歌上搜索“ruby on rails教程”来找到大堆和堆。不过。
答案 7 :(得分:4)
Rails中的“魔法”涉及method_missing
和metaprogramming的概念。 Dave Thomas的The Pragmatic Programmers创建了一组screencasts on metaprogramming Ruby。
PHP有一个名为__call
的等效函数,PHP 5.3引入了__callstatic
。您可以查看这些内容,以及在Google上搜索“php元编程”,以获取有关在PHP中实现类似Rails行为的一些阅读材料。
答案 8 :(得分:1)
命名约定非常重要:
http://rails.wincent.com/wiki/Rails_conventions
http://www.softiesonrails.com/2007/10/18/ruby-101-naming-conventions
答案 9 :(得分:0)
如果你真的想了解Rails,请阅读你想要的Rails的源代码。
OSL上的/Library/Ruby/Gems/1.8/gems/或冻结rails并可在RAILS_ROOT / vendor /目录中访问它