Ruby on Rails 是一种优雅、简洁且有趣的构建Web应用程序的方式。不幸的是,许多陷阱等待着新手程序员。既然我已经有了一些 Rails项目 经验,我想尽力让你免于我在刚开始时所经历的痛苦。
工具:直接获取它们
以下是您需要的工具。不要为了决定哪个最好而阅读无尽的评论;从某个开始,然后行动起来。
- Rails教程:一本连贯的书籍抵得上几十个拼凑起来的在线教程。
- InstantRails:一个包含Ruby、Apache、MySQL的.zip文件, PHP (供PhpMyAdmin使用),打包好即可运行。
- Aptana/RadRails (如Eclipse)或 Ruby In Steel (如Visual Studio)用于编辑代码。
- Subversion 和/或 TortoiseSVN 用于源代码管理。
- 在……上浏览流行的ruby on rails链接 del.icio.us, Rails文档 和 Ruby语法与示例.
但这到底意味着什么?
“Ruby on Rails”这个名称很吸引人但令人困惑。Rails是Ruby所服用的一种神奇药物吗?(取决于你问谁,是的。)
Ruby 是一种编程语言,类似于Python和Perl。它是动态类型的(不需要“int i”),解释型,并且可以在运行时修改(例如向类添加新方法)。它有几十个快捷方式,使其非常简洁;方法很少超过10行。它对正则表达式有很好的支持,并且适用于Shell脚本。
Rails 是一种 gem,即一个Ruby库。有些gem允许你使用Win32 API. 其他的处理网络。Rails帮助构建Web应用程序,提供用于保存到数据库、处理 URL并显示HTML的类(以及Web服务器、维护任务、调试控制台等更多功能)。
IRB 是交互式Ruby控制台(输入“irb”使用)。Rails有一个特殊的 IRB 控制台,可以在你的Web应用运行时访问它(非常适合实时调试)。
Rake 是Ruby版本的Make。定义并运行维护任务,例如设置数据库、重新加载数据、备份,甚至将应用程序部署到你的网站。
Erb 是嵌入式Ruby,类似于 PHP。 它允许你将Ruby与 HTML (例如):
<div>Hello there, <%= get_user_name() %></div>
YAML (或 YML) 意思是“YAML Ain’t a Markup Language”——它是一种简单的方式来 指定数据:
{name: John Smith, age: 33}
它就像 JSON, 比...精简得多 XML, ,并且被Rails用来设置配置选项(比如设置数据库名称和密码)。
呼!一旦Ruby安装好并加入路径,你可以使用以下命令添加rails gem:
gem install rails
通常,使用 gem install “gem_name”,它会在网上搜索该库。虽然Rails“只是另一个gem”,但它是让Ruby备受关注的杀手级库。
理解Ruby惯用法
同时学习一个新库和新语言让人望而生畏。以下是一些对于有C/C++/Java背景的人而言,Ruby最大的坑。
Ruby移除了不必要的累赘:(){};
- 方法调用中的圆括号是可选的;使用
print "hi". - 每行结束后不需要分号(我知道这很疯狂)。
- 使用“if then else end”而非大括号。
- if-then语句中的条件不需要用圆括号括起来。
- 方法自动返回最后一行(如果需要,显式调用
return显式调用)
Ruby去掉了那些烦人、随处可见的标点符号,这些符号会分散对程序逻辑的注意力。为什么要加括号((到处)括号)?同样,如果你想用括号,那就加上。但很快你就会摆脱这些辅助轮。
我们在C和Java中使用的那些行噪声(呃,“标点符号”)是为了编译器的利益,而不是我们的。警告:用了Ruby几周后,其他语言读起来会有点痛苦。
def greet(name) # simple method
"Hello, " + name # returned automatically
end
greet "world" # ==> "Hello, world"
那些有趣的Ruby变量(Those Funny Ruby Variables)
x = 3是方法或块的局部变量(方法结束后消失)@x = 3是每个对象拥有的实例变量(它会一直存在)@@x = 3是所有对象共享的类变量(它也会一直存在)。:hello是一个符号(Symbol),类似常量字符串。用于索引哈希(Hash)。说到这个……dictionary = { :cat => "Goes meow", :dog => "Barks loud."}是一个键/值对的哈希。使用……访问元素dictionary[:cat].
那些有趣的Ruby赋值(Those Funny Ruby Assignments)
Ruby有一个 || 运算符,看起来有点奇怪。当用于链式表达时
x = a || b || c || "default"
意思是“测试每个值,返回第一个不为假的值”。所以如果a为假,则尝试b。如果b为假,则尝试c。否则,返回字符串“default”。
如果你写 x = x || "default" 意思是“将x设为其自身(如果它有值),否则使用默认值。”更简单的写法是
x ||= "default"
意思相同:将x设为默认值,除非它有其他值。你会在Ruby程序中经常看到这个。
那些有趣的Ruby块(Those Funny Ruby Blocks)
Ruby有“块(block)”,就像匿名函数,传递给循环或其他函数。这些块可以使用|param|指定参数,然后执行操作、调用自己的函数等等。块在对数组的每个元素应用某些函数时很有用。可以把它们看作一种匿名函数,可以(但不是必须)接受参数。
3.times do |i|
print i*i
end
在这个例子中,数字0、1和2被传递给一个块(do… end),该块接受一个参数(i)并打印i的平方。输出将是0,然后是1,然后是4(由于我们没有加空格,看起来像“014”)。块在Ruby中很常见,但需要一些时间来适应,所以提前警告。
这些是入门时容易混淆的Ruby课程。试试 Why's Poignant Guide To Ruby 获取更多信息(“Why”是作者的名字……这当初也让我困惑过)。
理解Rails惯用法
Rails有自己的特点。“相信我们,这对你有好处。”程序员们说。的确——这些特性/怪癖让Rails脱颖而出,但在真正理解之前会让人困惑。记住:
- 类和表名很重要。 Rails有特定的命名约定;它期望来自该类的对象
Person被保存到名为的数据库表中people。是的,Rails有一个 复数化引擎(pluralization engine) 来确定哪个对象映射到哪个表(不开玩笑)。这种魔法很棒,但一开始当你不知道类和数据表是如何关联时会感到害怕。 许多方法接受一个“options”哈希作为参数,而不是有几十个单独的参数。当你看到
link_to “View Post”, :action => ‘show’, :controller => ‘article’, :id => @article
这个调用实际上做了以下事情:
link_to("View Post", {:action => 'show', :controller => 'article', :id => @article})
只有两个参数:名称(“View Post”)和一个包含3个键值对的哈希。Ruby允许我们去掉多余的括号和大括号,留下上面那种简化的函数调用。
理解模型-视图-控制器模式
Rails是围绕 模型-视图-控制器 模式构建的。这是一个简单的概念:将程序的数据、逻辑和显示层分开。这让你能够干净地分离功能,就像分开的 HTML, CSS 和Javascript文件可以防止代码混在一起一样。下面是 MVC 的分解:
- 模型 是与数据库交互的类。你查找、创建和保存模型(models),这样你通常就不必编写 SQL. Rails有一个类来处理在模型更新时保存到数据库的魔法。
- 控制器 获取用户输入(比如一个 URL)并决定要做什么(显示页面、下单、发表评论)。它们最初可能包含业务逻辑,比如查找正确的模型或更改数据。随着你的Rails忍者技巧的提高,不断重构并将业务逻辑移到模型(胖模型,瘦控制器)中。理想情况下,控制器只需接收输入,调用模型方法,并将输出(包括错误信息)传递给视图。
- 视图 显示输出,通常是 HTML. 它们使用 ERB 而Rails的这一部分类似于 PHP – 你使用 HTML 模板,并嵌入一些Ruby变量。Rails还使得创建视图变得容易,比如作为 XML (用于Web服务/RSS订阅)或 JSON (用于 AJAX 调用)。
这个 MVC 模式是构建可读、可维护且易于更新的Web应用的关键。
理解Rails的目录结构
当你创建第一个Rails应用时,目录已经为你布置好了。结构组织得很好:模型在app/models中,控制器在app/controllers中,视图在app/my_local_views中(开个玩笑)。
命名约定很重要——它让Rails应用能够轻松“找到自己的部件”,而无需额外配置。此外,其他程序员也很容易理解和学习任何Rails应用。我可以看看Typo(Rails博客软件),并在几分钟内很好地了解它的工作原理。一致性创造了理解。
理解Rails的脚手架
脚手架为你提供了默认的控制器动作(要访问的URL)和视图(要填写的表单)来与你的数据交互——你不需要自己构建界面。你只需要定义模型并创建数据库表。
把脚手架想象成你可以用来与应用交互的“默认”界面——随着应用的构建,你会慢慢覆盖默认的部分。你在控制器中用一行代码指定脚手架:
scaffold :person
它添加了默认的动作和视图,用于显示、编辑和创建你的“Person”对象。Rails表单需要一些时间来适应,所以在初始阶段脚手架非常有帮助。
更多技巧和窍门
我最初计划列出一些在学习Rails时觉得有用的技巧和诀窍。但我很快意识到Ruby on Rails实际上需要很多背景知识,尽管(或因为)它的“魔法”,它仍然可能令人困惑。我将在下一篇文章中介绍我最喜欢的技巧。
随着你进一步深入Web开发,这些指南可能会有所帮助:
- 如何用 Firefox 调试 Web 应用
- 如何优化您的站点 HTTP 缓存(Caching)
- 如何优化您的站点 GZIP 压缩(Compression)
- 加快你的 Javascript 加载时间
- 快速指南(The Quick Guide to) GUIDs
下次再见,欣赏这些有趣的视频: