什么是 Ruby on Rails?(简介)
Ruby on Rails 框架入门指南。
- Ruby(编程语言)
- Rails(框架)
- MVC(模型-视图-控制器)
- 路由
- ActiveRecord
- 数据库迁移
- 环境分离(开发、生产等)
- 资源管理(图片、样式表和 JavaScript)
- 插件(RubyGems 等)
- 结论
- 更多信息
那么,Ruby on Rails 究竟是什么?以下是介绍。
Ruby(编程语言)
来自维基百科:“Ruby 是一种动态、反射式、通用的面向对象编程语言,它将受 Perl 启发的语法与类似 Smalltalk 的功能结合在一起。Ruby 起源于 20 世纪 90 年代中期,由松本行弘(Yukihiro "Matz" Matsumoto)首次开发和设计。它主要受到 Perl、Smalltalk、Eiffel 和 Lisp 的影响。” Ruby 是一种优美的语言——你会爱上它。更多信息请访问ruby-lang.org,并在此处尝试。
Rails(框架)
Rails 是一个基于 Ruby 构建的 Web 框架,因此得名 Ruby on Rails。它使程序员能够通过脚手架和代码生成轻松创建高级的数据库驱动网站,遵循约定优于配置的原则,这意味着如果你遵循一套特定的约定,许多功能将开箱即用,只需很少的代码。
MVC(模型-视图-控制器)
Rails 基于一种称为 MVC 的编程模式,它代表模型-视图-控制器。在这里,我将尝试解释它是什么以及为什么使用它是有意义的。
模型 (Model)
MVC 中的模型是应用程序中每个实体的类。例如,模型是 *User*、*Category* 或 *Product*。模型包含所有业务逻辑,例如删除产品、添加新类别或创建新用户时应该发生什么。
有关模型示例,请参阅ActiveRecord部分。
视图 (View)
MVC 中的视图包含所有表示和表示逻辑,通常是 HTML。它基于ERuby,这是一个模板系统,允许将 Ruby 嵌入到 HTML 和其他语言中。您可能从 ASP、PHP 或 JSP 中了解过这种模板系统。
视图示例
<h1><%= @user.name %></h1>
<p>
<%= @user.description %>
</p>
控制器 (Controller)
控制器是将模型和视图绑定在一起的部分,例如,它告诉 *show product* 视图应该显示哪个产品,或者在用户更新购物篮时处理来自表单提交的数据。
控制器示例
class SiteController < ApplicationController
def home
end
def about
end
end
为什么 MVC 有意义?
MVC 允许业务逻辑与表示逻辑完美分离,使您的应用程序更加清晰,更易于维护,而且,最重要的是,开发起来更有趣。
路由 (Routing)
那么,访问者浏览器发出的请求是如何被发送到处理该请求的控制器呢?这是通过路由引擎完成的,它解释请求并将其传递给匹配的控制器。
match 'about' => 'site#about' # => /about
match 'contact' => 'site#contact' # => /contact
root :to => 'site#home' # => /
CRUD(创建、读取、更新、删除)
Rails 路由引擎的核心是CRUD,即*创建*、*读取*、*更新*、*删除*,它源于一个概念,即所有网页都由这四种操作组成。例如,您*创建*一个产品,*读取*一个用户,*更新*一个类别,并*删除*一个订单。
如果您遵循此模式,您将完成很多工作。例如,要为产品创建所有这些操作,只需告诉路由引擎您有一个名为 product 的实体,它将为您连接所有路由逻辑,将请求绑定到匹配的控制器。
resources :products # => /products/23
resources :orders do # => /orders/124
resources :items # => /orders/124/items
end
ActiveRecord
ActiveRecord 是一种模式,它允许在不编写任何数据库访问代码的情况下进行所有数据库访问。您告诉类或模型它应该是哪种实体,它具有哪些关系,它会自动为您处理其余部分,根据数据库中的字段创建属性,免费为您提供数据库操作方法,如创建、更新和删除。您只需要编写自定义业务逻辑。ActiveRecord 类几乎总是构成上述 MVC 模式的 *Model* 部分。
示例 ActiveRecord 模型
class Order < ActiveRecord::Base
belongs_to :user
has_many :items
end
然后您就可以
order = Order.find(123)
order.user.name # => user name
order.items # => array of items
数据库迁移
在 Ruby on Rails 中,您几乎从不直接与数据库打交道,就像您从 PHP 或其他脚本语言中了解的那样。取而代之的是,作为 ActiveRecord 的一部分,提供了一个完整的数据库迁移框架。数据库迁移意味着,您不需要手动编辑数据库,而是创建 Ruby 代码来创建表和添加列。这样做的好处是可以跨多个数据库执行相同的更改,例如,开发和生产数据库,而无需在部署到生产环境时记住您在开发数据库中所做的更改——您只需在不同环境中运行相同的迁移。
迁移也是通过代码生成创建的,因此您可以使用单个 shell 命令来创建表或添加列。
# creates a 'users' table with the specified fields
rails generate model User name:string email:string age:integer
# adds a description field to the 'users' table
rails generate migration AddDescriptionToUsers description:text
# runs the migration
rake db:migrate
环境分离(开发、生产等)
在 Rails 中,您可以完美地分离环境。这意味着您可以根据当前所处环境的不同设置来运行系统,例如,您希望开发环境显示详细的错误消息,而生产站点则向最终用户显示用户友好的消息。
资源管理(图片、样式表和 JavaScript)
Rails 3.1 的资源管道允许为您管理所有资源(图片、样式表和 JavaScript)。在开发环境中,您拥有完整的文件夹结构,其中包含以不同语言(如 CoffeeScript 和 SCSS)编写的样式表和 JavaScript。部署时,所有资源都将被编译并从同一文件夹中获取,所有样式表都将合并在一起,JavaScript 也是如此。这也意味着您不必手动包含,例如,jQuery——它通过jQuery Rails 插件为您包含。
插件(RubyGems 等)
使用 Ruby on Rails 进行编码意味着您将获得大量已为您编写好的插件。它们不在 Rails 核心中(核心非常简洁),而是作为RubyGems,这是一种 Ruby 的打包方式。例如,您可以拥有用于分页、搜索引擎优化或图像处理的插件。截至撰写本文时,已有超过 27,000 个 RubyGems 可供免费使用。
安装插件示例
gem 'will_paginate' # installs a pagination plugin
gem 'dynamic_sitemaps' # installs a sitemap generation plugin
结论
Ruby on Rails 是一个用于创建高级 Web 应用程序的优秀框架,与您获得的功能相比,它编写的代码非常少。我推荐它用于几乎任何类型的应用程序,尤其适合原型设计。为了激发您的灵感,我创建了一个视频,其中我使用 Ruby on Rails 在 10 分钟内创建了一个博客。看看它,您就会被征服。我还推荐官方 Ruby on Rails 网站的文档部分。对于那些熟悉 Ruby on Rails 的人,我推荐这篇关于从 3.0 版本到 3.1 版本变化的博文。
更多信息
- 访问Ruby on Rails 官方网站。
- 观看我的屏幕录像视频:10 分钟内在 Ruby on Rails 中创建博客。
- 查看这篇文章,了解更多关于 MVC 的信息:面向初学者理解 ASP.NET MVC(模型-视图-控制器)架构。