原文:StartingRuby on Rails:What I Wish I Knew
Ruby on Rails是一个优秀、简洁并且有趣的web应用开发框架。不幸的是,许多初学者是刚入门的程序员。在此,我根据自己走过的一些弯路总结了一些经验,希望有助于新手的学习。
1. 工具:这些足够了
接下来讲的这些工具都是你所需要的。不要浪费时间来做毫无意义的最优选择判断;选定工具即刻开始。
2. 术语
“Ruby on Rails”虽然比较容易记住但是容易误解。难道Rails是某些包含Ruby的药物?(取决于你问谁)
a) Ruby:与Python和Perl相似的语言。它是一门动态类型语言(即你不需要‘int i’),解释性语言,并且可以在运行过程中进行更改的语言(例如为某些类添加方法)。它拥有更简洁的代码;定义的方法很少超过10行。对正则表达式和Shell脚本有良好的支持。
b) Rails:是一个gem包,或者可以认为是一个Ruby语言库。一些gem包可以让你使用Win32API;另一些可以进行网络连接操作。Rails用于web应用开发,提供了一些类来存储数据到数据库,操作URLs并且显示HTML(有webserver、维护任务、调试窗口等等)。
c) IRB:是交互式的Ruby控制台(在命令行窗口输入irb进行)。Rails有一个特殊的IRB控制台可以访问正在运行的web应用(运行时调试非常有用)。
d) Rake:Ruby版本的Make程序。定义和运行一些维护任务,例如设置数据库、重载数据、备份、或者甚至给你的网站部署应用。
e) Erb:是内嵌的Ruby,与PHP相似。它可以让你在HTML代码中写Ruby代码。例如:<div>Hello there, <%= get_uer_name() %></div>
f) YAML(或YML):是“YAML Ain’ta Markup Language”—是存储数据的一种简单格式:{name: John Smith, age: 33}
与JSON相似,比XML更简洁,被Rails常用于设置配置参数信息(例如设置数据库名称和密码)。
唷!一旦装上Ruby并将其设置到系统path中,你可以如此方便的添加Railsgem包:gem install rails
通常,使用gem install ‘gem_name’命令来安装gem包,这些包将从网络资源库中搜索得到。尽管Rails仅仅是一个gem包,但正是这个闪耀的库将Ruby带入辉煌发展期。
3. Ruby语言概述
学习一门新的语言和其使得的库,通常会让人畏缩。接下来是Ruby语言与其他语言(C/C++/Java)的一些重要区别,有助于转入的开发者快速熟悉Ruby。
Ruby 去除了不必要的括号:(){}
- l 方法调用时的括号是不必的;可以使用print ‘hi’
- l 每行结尾的分号不是必须的(这点让我觉得疯狂)
- l 使用‘if thenelse end’替代括号
- l if-then语句中的括弧不是必须的
- l 方法自动返回最后一行(若需要可以调用return显式返回)
Ruby减弱了程序逻辑划分中那些必须的烦人的标点符号。为什么不需要使用括号?若你想用括号,也可以进行添加。但是你将废弃如此之好的风火轮。
通常在C或Java中,每行代码中的杂音(如括号),我们将不再需要。注意:当你使用Ruby几周后,其他语言的写法将不再能入你法眼。
def great(name) #simple method “Hello, “ + name # returned automatically end greet “world” # => “Hello, world”
如此有趣的Ruby变量:
如此有趣的Ruby赋值:
Ruby中可以使用||操作符,做如此有趣的操作:
x = a || b || c|| ‘default’
此例的意思是检测每个元素的值并返回第一个为true的值。因此若a是false,将检测b。若b是false,将检测c。否则,将返回字符串‘default’。
若你写x = x || ‘default’,意思是若x不为false保留其值,否则将’default’赋值给x。另一种写法是:x ||=‘default’(此种写法与上一种意思一样,你将会在Ruby程序中常看到如此写法)
如此有趣的Ruby块:
Ruby中有块定义,块类似于传入循环或其他函数的匿名函数。块可以通过|param|方式来传入参数并进行逻辑处理,调用它们自身的方法等等。在对数组中每个元素进行一些操作时,使用块将很方便。可以认为块是匿名函数的一种类型,但是块不一定有参数。
3.timesdo |i|
printi*i
end
此例中,数字0、1和2被传入到块中(do…end),此块接收一个参数i并打印i的平方数。此例子的输出结果为014。注意了,在Ruby程序中使用块操作非常普遍。
以上这些是Ruby中与其他语言不太一样的地方。
4. Rails概述
Rails有一些特性。其开发者说过‘相信我们,它适合你’。这是真的,正是一些特性的缘故是的Rails脱引而出,但是同样也带有一些迷惑。
记住:
- l 类和数据表的名字很重要:Rails有严格的命名约束;它希望来自Person类的对象数据能够存储到命名为people的数据表中。是的,Rails有复数化引擎来映射对象与数据表。这是非常神奇的,但是在第一次使用时,总是有点提心吊胆的滋味,不确定类如何与数据表进行连接。
- l 许多的方法有一个Hash作为参数,而不是有一打单独的参数。当你看到:
link_to “ViewPost”, :action => ‘show’, :controller => ‘article’, :id => @article
此代码实际是:
link_to(“ViewPost”, {:action => ‘show’, :controller => ‘article’, :id => @article})
仅有两个参数,一个为name(“ViewPost”)和有3个键值对的Hash结构。Ruby让你可以省去额外的括弧和括号,留下简洁的调用方式。
5. 理解MVC模式
Rails是建立在model-view-controller模式上的。这是一个简单的概念:将数据、逻辑和显示层进行分离。它允许你将功能表达的更清晰,将像区分HTML、CSS和JS文件防止将它们全部写入到一个文件中一样。接下来是MVC的各模块的解释:
- l Models:数据模型层是与数据库进行交互的。你会发现,创建和保存模型时不需要写SQL语句。Rails有一个类用于处理当数据进行更新后对数据库的保存操作。
- l Controllers:接收用户的输入(像URL)并决定做什么(显示页面、排序、发布评论)。它们可能包含一些初始化业务逻辑,如查找正确的模型或改变数据。随着你Rails技能的提高,对代码进行重构,将业务逻辑移到模型层(胖模型层轻控制器层)。理想情况下,控制器仅仅接收输入,调用模型方法,将输出传入到视图层(包含错误信息)。
- l Views:显示输出,通常使用HTML。Rails通常使用ERB,在HTML模板中使用Ruby代码。Rails也可以方便的创建XML(为web服务器或RSS feeds)或JSON(为AJAX)模板。
MVC模式有助于创建易读、易维护性和易更新的web应用。
6. 了解Rails的目录结构
当你创建你首个应用的时候,应用的目录结构将自动生成。此结构是:数据模型存在app/models,控制器存在app/controllers中,视图存在app/my_local_views(开玩笑了)。
Rails中命名约束很重要,它可以让你的应用更容易的找到相应的模块,而不需要额外的配置。同时,对于其他开发者阅读你的代码,也将变得容易理解。我可以从Rails简单的博客系统中,了解到它是如何工作的。一致性使得更易理解。
7. 了解Rails的脚手架
脚手架给你生成默认的控制器动作(访问的URLs)和视图(填充的表单)与你数据进行交互-——你不必自己建立接口。你只需要定义模型和创建数据库表。
将脚手架作为你应用的默认接口——你可以构建应用中进行逐步的修改。你可以声明脚手架对应的控制器:scaffold :person,通过此操作将创建默认的动作和显示、编辑视图并创建Person对象。Rails表单已经包含了通常使用的字段,因此使用脚手架功能在初始阶段创建应用非常有用。