虽然还是测试版本,但 Ruby on Rails 已经成为进行 Web 应用程序开发的一个新途径。Rails 的成功之处在于能够自动化大部分常见类型的 Web 应用程序的创建,而且在您希望添加定制或者有特殊要求时,并不会受到限制。不仅如此,同那些只能完成 Web 应用程序单方面需求的自由软件(Free Software)库相比,Rails 包含了非常完整的一套工具。<o:p></o:p>
Ruby on Rails 正在令整个 Web 开发领域受到震憾。让我们首先了解底层的技术: <o:p></o:p>
- Ruby 是一门免费的、简单的、直观的、可扩展的、可移植的、解释的脚本语言,用于快速而简单的面向对象编程。类似于 Perl,它支持处理文本文件和执行系统管理任务的很多特性。<o:p></o:p>
- Rails 是用 Ruby 编写的一款完整的、开放源代码的 Web 框架,目的是使用更简单而且更少的代码编写实际使用的应用程序。<o:p></o:p>
作为一个完整的框架,这意味着 Rails 中的所有的层都是为协同工作而构造的,所以您不必自己再重复,可以完全只使用一门单一的语言。在 Rails 中,所有内容(从模板到控制流再到业务逻辑)都是用 Ruby 编写的。Rails 支持基于配置文件和注释的反射(reflection)和运行时扩展。<o:p></o:p>
本文详细介绍了 Rails 的组成部分,并介绍了它的工作原理。<o:p></o:p>
Rails 介绍
关于 Rails,首先需要理解的是它的模型/视图/控制器(model/view/controller,MVC)架构。虽然这种技术不是 Rails 所特有的 —— 甚至不是 Web 应用程序所特有的(相对于其他程序),但是 Rails 具有非常清晰而专一的 MVC 思维方式。如果您并不使用 MVC 方法,那么 Rails 的用处将大为降低(与遵循其模式的情况相比)。 <o:p></o:p>
模型
Rails 应用程序的模型部分主要是它所使用的底层数据库。实际上,在很多情形中 Rails 应用程序正是以一种受管理的方式对关系型数据库管理系统(RDBMS)中的数据执行操作的一个途径。 <o:p></o:p>
ActiveRecord 类是 Rails 的一个核心组成部分,它将关系型表映射为 Ruby 对象,使其成为控制器可以操作并能在视图中显示的数据。Rails 应用程序特别倾向于使用广为应用的 MySQL 数据库,不过也有与很多其他 RDBMS 的绑定,比如 IBM® DB2®。 <o:p></o:p>
如果您愿意,您可以添加 Ruby 代码来在应用程序模型中执行额外的验证,加强数据关联,或者触发其他操作。应用程序的 app/models/ 目录中的 Ruby 文件能够调用 ActiveRecord 的多种验证方法。不过,您也可以将模型代码留作一个存根,而只是依赖保存数据的 RDBMS 的约束。例如,我在这个示例中所开发的应用程序只包含这个骨架模型代码(至少在开始时是): <o:p></o:p>
清单 1. 骨架模型 app/models/contact.rb<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
class Contact < ActiveRecord::Base<o:p></o:p>
<o:p> </o:p>
end<o:p></o:p>
<o:p> </o:p>
|
控制器
控制器以其抽象形式执行应用程序的逻辑。也就是说,应用程序的 app/controllers/ 目录中的 Ruby 脚本能把模型数据导入为变量,保存回去,或对其进行修改和处理。不过,控制器不关心用户如何适当地显示或者输入数据。在通常的 MVC 模型中,这可以让用户能够以多种方式与同一控制器进行交互:本地 GUI, Web 界面,以及视力较弱的人使用的语音界面都可以与相同的控制器进行交互。 <o:p></o:p>
不过,Rails 不像那样非常通用;相反,它仅局限于在 Web 页中提供和收集数据。虽然如此,但是您可以修改那些 Web 页的布局 —— 颜色、字体、表格、样式表单,等等 —— 与控制器代码无关。 <o:p></o:p>
视图
Rails 视图是我们编写 Ruby 代码的地方。Rails 包含有一门用于 .rhtml 的非常好的模板语言,它将纯粹的 HTML 与嵌入的 Ruby 代码组合起来。 Rails 应用程序界面的最表层外观通常是由 CSS 样式表单控制的。.rhtml 格式是一种增强的 HTML。实际上,一个简单的 HTML 文件本身也是一个合法的 RHTML 模板,不过,不应该忽略 RHTML 为您提供的脚本控制。 <o:p></o:p>
RHTML 是真正的模板格式 —— 不仅是在 HTML 中嵌入代码的方式 —— 这是一种更为有效的方法。如果您熟悉 PHP,那么可以考虑 PHP 本身与 Smarty 模板之间的对照。也就是说,嵌入的脚本只是将代码与未被解释的 HTML 混合在一起;当需要向客户机输出某些内容时,代码部分仍要负责执行 print 语句。 <o:p></o:p>
与之不同的是,模板引擎向 HTML 添加了一组定制的标签,让您能够将条件、循环以及其他逻辑作为增强的 HTML 标记的一部分来表示。 <o:p></o:p>
生成代码
Rails 所提供的工具主要是一组代码生成器。相对于那些强迫我使用严格的工作空间和 IDE 的开发环境,我更喜欢这种方法。 Rails 不会妨碍您,但是却会为您省去大部分手工编程的工作 —— 或者,通过提供“可自由获得的”初步(first-pass)支架(scaffolding),至少帮助您轻松将需要手工编码的工作分为多个部分。 <o:p></o:p>
支架 概念是 Rails 中的核心概念。非常简单的应用程序可能完全不用编码,让 Rails 在运行时动态地生成客户机 HTML 页面。第一遍生成代码时创建的只是粗略的支架;接下来您可以生成更详细的能够定制的控制器、视图和模型。不过在开始时不需要生成太多。 <o:p></o:p>
Rails 对其文件的组织是固定的而且非常普通的,不过这种组织相对严格。如果您试图强行使用其他文件和代码组织方式,那么您可能得付出努力去修改 Rails 环境。再者说,我找不到不使用 Rails 所提供的组织方式的理由;在大部分情况下,它“fits your brain”(Ruby 的支持者喜欢这样讲)。例如,如果您从头开始设计一个框架(至少如果您以“Ruby 方式”思考),那么这些目录名称及其组织可能与您的选择非常接近。 <o:p></o:p>
构建一个简单的应用程序
在 Ruby on Rails Web 站点上有一些教程,可以完整地引导您创建一个简单的 Rails 应用程序(见 参考资料)。这里的示例程序与之类似,因为正确开始构建 Rails 应用程序的方式是确定的。由于此介绍的长度相对较短,所以我 极力 推荐那些较长的教程中的一篇,以使得您能够打好更为全面的基础。 <o:p></o:p>
示例应用程序是一个基本的通讯录。它演示了创建应用程序的一般步骤: <o:p></o:p>
1. 生成模型(在此步骤中创建 MySQL 数据库和表)。<o:p></o:p>
2. 生成应用程序(包括生成基本代码和目录)。<o:p></o:p>
3. 启动 Rails(并配置数据库的访问)。<o:p></o:p>
4. 创建一些内容(包括生成支架模型和控制器,并告知控制器去使用那个支架)。<o:p></o:p>
我们将详细研究每一个步骤。 <o:p></o:p>
生成 AddressBook 模型
对于任何应用程序,您需要做的第一件事情是为它创建一个存放数据的数据库。技术上这个步骤不必最先进行,不过需要在早期完成;应该在编写任何应用程序代码(甚至是自动生成的代码)之前创建数据库,这应该是显然的。所以,让我们在 MySQL 数据库中创建一个数据库,并在此数据库中创建第一张表。(阅读其他文档以了解如何安装运行 MySQL 或其他 RDBMS。)<o:p></o:p>
我们假定 MySQL 已经安装并且可用。 <o:p></o:p>
清单 2. 创建 MySQL 数据库和表<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
[~/Sites]$ cat AddressBook.sql<o:p></o:p>
<o:p> </o:p>
CREATE DATABASE IF NOT EXISTS AddressBook;<o:p></o:p>
<o:p> </o:p>
USE AddressBook;<o:p></o:p>
<o:p> </o:p>
CREATE TABLE IF NOT EXISTS contacts (<o:p></o:p>
<o:p> </o:p>
id smallint(5) unsigned NOT NULL auto_increment,<o:p></o:p>
<o:p> </o:p>
name varchar(30) NOT NULL default '',<o:p></o:p>
<o:p> </o:p>
created_on timestamp(14) NOT NULL,<o:p></o:p>
<o:p> </o:p>
updated_on timestamp(14) NOT NULL,<o:p></o:p>
<o:p> </o:p>
PRIMARY KEY (id),<o:p></o:p>
<o:p> </o:p>
UNIQUE KEY name_key (name)<o:p></o:p>
<o:p> </o:p>
) TYPE=MyISAM COMMENT='List of Contacts';<o:p></o:p>
<o:p> </o:p>
[~/Sites]$ cat AddressBook.sql | mysql<o:p></o:p>
<o:p> </o:p>
|
在这第一张表中有些地方需要注意。最重要的是每一张表都必须拥有一个 id 列,列名称就是 id。Rails 使用主键列 id 来完成各种记录保持和引用任务。域 created_on 和 updated_on 是不需要的,不过,如果您使用了它们,那么 Rails 会自动地“在后台”维护它们;在大部分情况下使用这些时间戳没有什么不好。所以,您还要添加的“真正” 数据就只是通讯录内容的名称。 <o:p></o:p>
另一个稍微古怪的方面是,Rails 为不同的内容使用单数和复数的名称。根据上下文,各种条目会被重命名为单数或复数形式。表的名称应该使用复数格式。我没有使用不规则复数单词的经验;datum 和 data 等单词可能会令 Rails 出现问题。 <o:p></o:p>
生成 AddressBook 应用程序
既然已经拥有了一个能够交互的数据库,就可以创建 AddressBook 应用程序了。第一个步骤是简单地运行 rails 来生成基本目录和支架代码: <o:p></o:p>
清单 3. 生成基本代码和目录<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
[~/Sites]$ rails AddressBook<o:p></o:p>
<o:p> </o:p>
create<o:p></o:p>
<o:p> </o:p>
create app/apis<o:p></o:p>
<o:p> </o:p>
create app/controllers<o:p></o:p>
<o:p> </o:p>
create app/helpers<o:p></o:p>
<o:p> </o:p>
create app/models<o:p></o:p>
<o:p> </o:p>
create app/views/layouts<o:p></o:p>
<o:p> </o:p>
create config/environments<o:p></o:p>
<o:p> </o:p>
create components<o:p></o:p>
<o:p> </o:p>
[...]<o:p></o:p>
<o:p> </o:p>
create public/images<o:p></o:p>
<o:p> </o:p>
create public/javascripts<o:p></o:p>
<o:p> </o:p>
create public/stylesheets<o:p></o:p>
<o:p> </o:p>
create script<o:p></o:p>
<o:p> </o:p>
[...]<o:p></o:p>
<o:p> </o:p>
create README<o:p></o:p>
<o:p> </o:p>
create script/generate<o:p></o:p>
<o:p> </o:p>
create script/server<o:p></o:p>
<o:p> </o:p>
[...]<o:p></o:p>
<o:p> </o:p>
|
我删减了运行 rails 的输出;所忽略了那些行只是提醒您已经创建的各种文件和目录。在您的系统上试运行它,浏览生成的所有文件。我已经在代码中显示了一些最重要的文件和目录。 <o:p></o:p>
运行 Rails
创建了 AddressBook/ 目录和所需要的子目录后,您需要执行一次惟一的初始配置。首先,通过修改 YAML 配置文件来设置数据库,如下: <o:p></o:p>
清单 4. 配置数据库访问<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
[~/Sites]$ cd AddressBook<o:p></o:p>
<o:p> </o:p>
[~/Sites/AddressBook]$ head -6 config/database.yml # after editing<o:p></o:p>
<o:p> </o:p>
development:<o:p></o:p>
<o:p> </o:p>
adapter: mysql<o:p></o:p>
<o:p> </o:p>
database: AddressBook<o:p></o:p>
<o:p> </o:p>
host: localhost<o:p></o:p>
<o:p> </o:p>
username: some_user<o:p></o:p>
<o:p> </o:p>
password: password_if_needed<o:p></o:p>
<o:p> </o:p>
|
最后,您需要提供数据。Rails 附带了它自己的单一功能的 Web 服务器,即 WEBrick,非常适用于我们的试验。您可能也会遵循 Ruby on Rails Web 站点上的说明来配置 Apache 或者其他服务器,以通过 FCGI(或者普通的 CGI,但是普通的 CGI 将会较慢)向 Rails 应用程序提供服务。 <o:p></o:p>
清单 5. 启动 WEBrick 服务器<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
[~/Sites/AddressBook]$ ruby script/server -d<o:p></o:p>
<o:p> </o:p>
=> Rails application started on http://0.0.0.0:3000<o:p></o:p>
<o:p> </o:p>
[2005-03-21 17:57:38] INFO WEBrick 1.3.1<o:p></o:p>
<o:p> </o:p>
[2005-03-21 17:57:38] INFO ruby 1.8.2 (2004-12-25) [powerpc-darwin7.8.0]<o:p></o:p>
<o:p> </o:p>
|
创建一些内容
要在 WEBrick 端口上看到一个欢迎页面,先前的步骤就足够了。例如,在我的本地系统中,现在可以访问 http://gnosis-powerbook.local:3000/ 。不过,为了操作定制数据库,需要生成稍微多一些代码。可以使用脚本 generate 来完成此任务,这个脚本创建在 AddressBook/ 应用程序目录中: <o:p></o:p>
清单 6. 支架模型和控制器代码的生成<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
[~/Sites/AddressBook]$ ruby script/generate model contact<o:p></o:p>
<o:p> </o:p>
exists app/models/<o:p></o:p>
<o:p> </o:p>
exists test/unit/<o:p></o:p>
<o:p> </o:p>
exists test/fixtures/<o:p></o:p>
<o:p> </o:p>
create app/models/contact.rb<o:p></o:p>
<o:p> </o:p>
create test/unit/contact_test.rb<o:p></o:p>
<o:p> </o:p>
create test/fixtures/contacts.yml<o:p></o:p>
<o:p> </o:p>
[~/Sites/AddressBook]$ ruby script/generate controller contact<o:p></o:p>
<o:p> </o:p>
exists app/controllers/<o:p></o:p>
<o:p> </o:p>
exists app/helpers/<o:p></o:p>
<o:p> </o:p>
create app/views/contact<o:p></o:p>
<o:p> </o:p>
exists test/functional/<o:p></o:p>
<o:p> </o:p>
create app/controllers/contact_controller.rb<o:p></o:p>
<o:p> </o:p>
create test/functional/contact_controller_test.rb<o:p></o:p>
<o:p> </o:p>
create app/helpers/contact_helper.rb<o:p></o:p>
<o:p> </o:p>
|
注意,在相应的表名中,这里应该使用单数的 contact ,而不是复数的 contacts 。 <o:p></o:p>
现在需要编辑一个或多个生成的文件(只需稍加编辑)来让控制器去使用支架: <o:p></o:p>
清单 7. 告知控制器去使用支架<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
[~/Sites/AddressBook]$ cat app/controllers/contact_controller.rb<o:p></o:p>
<o:p> </o:p>
class ContactController < ApplicationController<o:p></o:p>
<o:p> </o:p>
model :contact<o:p></o:p>
<o:p> </o:p>
scaffold :contact<o:p></o:p>
<o:p> </o:p>
end<o:p></o:p>
<o:p> </o:p>
|
现在可以通过类似于 http://rails.server/contact/ 的 URL (在我的测试用例中是 http://gnosis-powerbook.local:3000/contact/ )来查看和修改数据库的内容。
|
相关推荐
总的来说,这个教程系列将带领开发者逐步学习如何利用 Ruby on Rails 的灵活性和 Eclipse 的强大工具集,为 iPhone 用户提供定制的 Web 应用体验,而无需完全转向原生应用开发。通过这一过程,开发者可以平衡开发...
NULL 博文链接:https://dayone.iteye.com/blog/265023
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on Rails 培训。学习英语这门世界语言是很重要的,但先通过母语学习往往会更有效果。正因为这样,当看到 ...
《Ruby on rails web开发学习实录》的光盘文件
Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web应用程序的开发流程。本资源为"Ruby on Rails Web开发学习实录随书光盘"的源代码,...
Ruby on Rails Web开发学习实录.pdf
总结以上内容,Ruby on Rails快速Web应用开发实战的文档详细介绍了Ruby编程语言和Rails框架的安装、配置以及使用。它涵盖了从Rails的历史和版本发展到如何在不同操作系统上安装Rails,再到如何使用Rails进行Web应用...
Ruby on Rails,简称Rails,是由David Heinemeier Hansson创建的一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性。在这个开发环境包中,我们拥有Ruby ...
”这句话生动地描述了Ruby on Rails的独特之处以及它在Web开发领域的影响力。 #### 二、安装 安装Ruby on Rails的方法多样,具体包括: - **InstantRails**:适用于Windows用户的单击安装包。 - **Locomotive**:...
Ruby on Rails是一款基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发流程。在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,...
Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用程序的开发。Rails由David Heinemeier Hansson于2004年创建,它提倡“约定优于配置...
Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...
Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用框架,它遵循敏捷开发原则,致力于简化Web开发过程。Rails的核心理念是“Convention over Configuration”(约定优于配置),这意味着开发者可以减少大量...
Ruby on Rails,简称Rails,是一种基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。本示例源码提供了使用Ruby on Rails进行实际项目开发的具体...
Web开发:Ruby on Rails.pdf
教程内容涵盖了Ruby语言基础、Rails框架搭建、Web应用开发、数据库操作、部署与维护等方面的知识。 适用人群: 本资源适用于对Web开发和Ruby on Rails框架感兴趣的初学者和有一定编程基础的开发者。 能学到什么: ...
通过阅读《Ruby on Rails 3 Tutorial》,你不仅能够掌握Ruby on Rails的基本知识,还能获得实际开发经验,从而有信心构建出自己的Web应用。这本书是Ruby on Rails初学者的一份宝贵资源,将帮助你开启精彩的Web开发之...