使用Ruby on Rails

如果一想到钻研另一项热门新技术就让你头疼的话,我表示同情。我主要坚持PHPPerl多年来,愉快地忽略了大多数其他开发时尚。

然而,当我的项目变得越来越复杂时,我开始重新考虑这一点。在听了一位全职开发人员谈论他在将PHP用于大型数据库驱动的Web项目时遇到的限制,以及开发框架是多么有用之后,我决定是时候认真研究一些更健壮的工具了。

如果您正在寻找一种框架,那么有几种有趣的选择——给您的应用程序赋予结构,并帮助您用更少的代码做更多的事情。用于Ruby编程语言的Rails可能是目前最流行的框架,我很想知道为什么。

但是一个业余编码爱好者真的能学会Ruby on Rails (RoR)吗?

SitePoint企业。Patrick Lenz的《构建你自己的Ruby on Rails Web应用程序》(Build Your Own Ruby on Rails Web Applications)承诺,它既为核心程序员编写,也为那些缺乏经验的程序员编写——甚至包括那些只知道HTML和CSS的人。“Web开发从来没有像使用Ruby on Rails这么简单,这么有趣,”Lenz说。

有趣吗?好了,我准备看看RoR是否真的比我最近使用PHP和Perl完成的项目更快、更简单和更有趣。

几个星期后,我浏览了伦茨书的一部分,以及其他一些资料。最后,我能够创建一个简单的应用程序来从MySQL数据库中提取项目。我了解了为什么在Rails上编写Ruby应用程序已经成为一种重要的Web开发趋势。

为什么使用像Rails这样的框架?

Ruby on Rails的目的就是向项目中添加结构和内置功能,目的是限制单调、重复和令人困惑的编码。不过,需要注意的是:一开始,它似乎增加了复杂性。它最终会给你带来很大的红利,但你必须在开始投资时抓住长期利益的前景。

我把它比作报税。假设有人向您提供了一个制作精美、构造完美的文件系统,用于跟踪您的财务状况——一个直观且易于使用的文件系统,但需要一点学习曲线。如果你是单身,填一份简短的表格,然后按标准扣款,把所有的东西都放在一个文件夹里,4月份再处理可能会更容易一些。同样,对于非常简单的脚本和应用程序,也不需要Rails这样的开发框架。

但现在想象你有一个家庭。而换了工作。并有租金财产性收入。而一些自营收入。现在,文件系统开始看起来更吸引人。因此,它是使用Rails。随着应用程序变得更加复杂,要不断添加功能(或编程团队的成员),良好的深思熟虑的,已经存在的结构可以是强大的得心应手。

对我来说,发现和学习Rails和谷歌地图有相似的效果;这似乎好得令人难以置信,”Rob Orsini在Rails Cookbook中写道。“Rails自动或优雅地处理了所有我觉得Web开发中最不愉快的事情,它们不再是痛苦的……我经常说,创建Rails项目的简单行为就像有一屋子经验丰富的软件老手在传授他们关于合理应用程序设计的知识,确保我的项目沿着正确的方向开始。”

甚至在我自己用PHP编写的一个简单应用程序中就可以看到这一点。它开始时只有几页PHP和一个简单的MySQL数据库。然后我想在我的手机上看一个手机版本。然后我需要在数据库中添加几个新字段。然后我换了网络主机。你明白了吧。

外部配置文件和样式表处理了其中一些问题,但是用于访问我的数据库的一些SQL命令有细微的差异。突然之间,我需要修改散布在众多页面中的SQL代码。是的,我本可以在一开始就更模块化地构建我的代码。但是我没有。这是框架的一个优点——它使我更模块化地编写代码,避免了我本来就喜欢走捷径的习惯。

Ruby on Rails框架的官方网站承诺,“通过习惯优于配置,Ruby on Rails让您能够编写漂亮的代码”。换句话说,Rails为您完成了大部分工作,而不是为您的应用程序提供结构。这意味着,首先,你不需要为你将在app中使用的函数创建一个单独的文件;Rails会自动为您生成这样的文件。当然,创建这样的文件并不需要那么多的工作。但是由于每个Rails项目使用相同的文件结构,团队中的每个人都知道在哪里可以找到它们——甚至是中途加入项目的程序员。当您有一段时间没有查看代码时,它还可以使您更容易维护自己的代码。

另外,如果您使用Rails命名约定,当您创建对象的新“实例”时(参见面向对象编程解释…在英语!),它们会自动映射到适当的数据库行——而不需要编写任何SQL代码。如果您要进行大量的数据存储和检索,这将非常方便。

Rails甚至可以用几行易于理解的代码优雅地连接不同数据库表中的对象。如果我在数据库中保存故事,以后会搜索哪些是在某个日期发布的,那么我可以很容易地在一开始定义PublishDate和Story的文件中定义PublishDate has_many:stories和Story belongs_to: PublishDate。它是这样的:

类故事< ActiveRecord::Base

属于:publishdate

结束

类PublishDate < ActiveRecord::Base

has_many:故事

结束

(ActiveRecord是一个预定义的Rails类。)通过这些简单的、人类可读的代码行,建立了一种关系,允许我查找在给定日期发布的故事。如何?如果mydate是一个变量,表示一个特定的发布日期,那么我就能找到在那个日期之前的所有故事

mydate.stories

就这样——比我使用PHP进行数据库查询的代码要少得多。

楞兹指出,RoR的另一个开发原则是“不要重复自己。”我已经非常严重地违背了这一点,并且很高兴能够得到帮助来简化我的代码。在发现我应该将哪些代码片段变成可重复的函数之后,发现这一事实非常耗费时间,而且我还没有发现提前画出这个草图的窍门。

Ruby基础知识

红宝石,在Rails框架中使用的面向对象的编程语言,是由幸“马茨”松本在1995年的Ruby创造的一切都是对象 - 每一个变量,甚至这样的文字为“你好世界”。

要开始编写Ruby on Rails应用程序,我首先需要在我的系统上安装RoR。在Windows上,楞兹建议使用Curt Hibbs的简单运行的Instant Rails。好主意。在解压缩了大约18000个文件几分钟后,Instant Rails很快出现在我的Windows笔记本电脑上。使用该命令更新Rails既快又轻松

rails gem安装

——包括依赖关系

在Linux机器上安装RoR要手动一些。如果没有完整的即时Rails包,您需要首先在您的系统上安装Ruby编程语言,然后是Rails框架(它是由David Heinemeier Hansson用Ruby编写的,作为名为Basecamp的项目管理Web应用程序的一部分)。在project wiki上有一些链接解释了如何在各种Linux发行版上安装RoR。

第一印象

一些简单的Ruby命令的优雅给我留下了深刻的印象。想要找到一个字符串的长度?只需对字符串应用length方法,用句点将对象与其方法分开:

“莎朗Machlis”长处

在交互式Ruby控制台中键入该值,您将得到14。(一个交互式Ruby控制台将在您输入命令时运行它们。打开一个Ruby窗口,输入irb命令进入交互模式。)

Ruby命令不需要在末尾使用分号,考虑到我多年来在PHP和MySQL中使用的分号,这一点很有吸引力。如果你使用的方法不需要一个值传递给它,你就不需要像在很多其他语言中那样添加空括号。

Ruby比其他语言更直观,Vermonster LLC的开发人员Jay Powers最近告诉我——代码更容易阅读和理解。他说,使用Ruby on Rails编写大型项目所需的时间比PHP或Perl要少,因为内置的方法更多。

这是好消息。更令人畏缩的发现是,最初在PHP中设置类比我习惯的要复杂得多。

在定义类时,通常需要一些“实例方法”和一些“实例变量”来存储数据。这些变量总是以@符号开头,如@name或@ssnum。

以下是Lenz为class Car所做的事情(每个#标记之后的一切都是我添加的解释)。

创建一个名为“Car”的新类

@mileage = 0 #设置每辆车的初始里程为0

def set_mileage(x) #开始一个更改里程的方法

@mileage = X#集的新的里程值

结束方法

def get_mileage #开始“实例方法”,该方法允许我们从car对象中读取里程数据

该方法将返回此变量的值

结束方法

课程结束

@kitt = Car.new#现在我们已经有了一个车,车上对象命名基特

@kitt.set_mileage(5667) #存储了kitt汽车5667的里程数据

@kitt。读取凯特汽车的里程信息

一开始,我的老方法,不使用PHP中的对象,似乎简单得多:

kitt_mileage = 5667美元;创建一个PHP变量$ kitt_里数,并将其设置为5667

echo $ kitt_mileage;#打印变量$kitt_mileage的值

然而,将来操纵这些变量将会变得更加复杂。我的同事兼程序员Joyce Carpenter向我保证,在对象结构化方面的前端投资将会有回报。我锐意进取。

Ruby具有我在编程语言中期望的许多典型特性,比如数组、关联数组(通常称为散列)、字符串、条件语句、循环等等。

Lenz很早就指出了一点:为了循环数组中的数据,Ruby程序员更可能使用“块”而不是for/else/while/until循环。“然而,对于Ruby新手来说,它们也是需要一段时间才能‘点击’的东西之一,”他指出。他说得对。我看不出一个结构像

(凯特,赫比,蝙蝠车,拉里)。每个做| car_name |

把car_name.mileage #

结束

比什么都好

$car_array = array("kitt", "herbie", "batmobile", "larry");

foreach ($car_array为$key => $value){

回声“美元价值\ n”;

}

在PHP中。我需要继续阅读。

亲力亲为的Rails:附带代码

现在,我已经对Ruby有了一点了解,接下来是Rails开发框架。要在Rails中启动一个新项目,您可以键入

rails yourprojectname

在Rails控制台中。

如果您愿意,可以按照下面的步骤创建您自己的项目。如果你在Windows上使用InstantRails,点击左上角的I并选择Rails应用程序——>管理Rails应用程序。这为您提供了创建一个新的Rails应用程序的选项,它将在正确的rails_app目录中打开一个shell。

我输入

rails myfavorites

这将创建一堆新目录——在顶层有十几个,再加上更多的子目录。

如果您习惯于从几个非结构化的文件开始,“子目录的财富起初可能会让您不堪重负,”Lenz说。

是的。

但是,他解释说,“在建立和命名文件夹上花了很多心思,结果是一个文件系统结构良好的应用程序。”这使得变量、对象、文件夹、数据库等之间的自动关联成为可能。上行吗?你要做的工作少了很多。

建筑基础知识

Rails遵循模型-视图-控制器(MVC)架构原则。Lenz解释说,基本上,模型处理数据和业务逻辑;控制器处理应用逻辑和传递给用户界面的信息;视图处理在浏览器中显示的GUI和表示HTML。

在Rails中,模型、视图和控制器文件是在它们自己自动生成的子目录中创建的,这些子目录是在自动生成的主项目目录app/project下的十几个子目录之一。

如果你习惯把所有东西合并到一个文件中,就像我一样,这需要一些时间来适应。最初,这个概念看起来非常愚蠢:在我的app/models目录中创建一个文件来设置数据结构;在我的app/controllers目录中创建另一个文件,用于设置计算、数据库查询等逻辑;用HTML代码在我的app/views目录中创建第三个文件。所有这些只是为了完成显示某些东西的简单任务。不幸的是,我可以在一个PHP或Perl文件中使用几行代码完成所有这些工作。

然而,看起来有许多初始的复杂性和约束,实际上是不那么重复、更容易维护的代码的基础。遵守规则,我就会知道我的申请的每个部分都在哪里;我不需要通过搜索分散在无数个单独的.php文件中的代码来进行更改。

123. 第1页
第1页共3页
工资调查:结果在