Rails 是一个 Web 应用程序框架,它包含创建基于数据库的 Web 应用程序所需的一切,这些应用程序遵循模型-视图-控制器 (MVC)模式。
理解 MVC 模式是理解 Rails 的关键。MVC 将应用程序分为三层:模型、视图和控制器,每层都有特定的职责。
模型层代表领域模型(例如账户、产品、人员、帖子等),并封装了应用程序特有的业务逻辑。在 Rails 中,基于数据库的模型类派生自ActiveRecord::Base
。Active Record 允许您将数据库行中的数据呈现为对象,并使用业务逻辑方法修饰这些数据对象。虽然大多数 Rails 模型都由数据库支持,但模型也可以是普通的Ruby 类,或者实现 Active Model 模块提供的一组接口的 Ruby 类。
视图层由“模板”组成,负责提供应用程序资源的适当表示。模板可以采用多种格式,但大多数视图模板都是嵌入了 Ruby 代码的 HTML(ERB 文件)。视图通常用于渲染以生成控制器响应或生成电子邮件正文。在 Rails 中,视图生成由 Action View 处理。
控制器层负责处理传入的 HTTP 请求并提供合适的响应。通常,这意味着返回 HTML,但 Rails 控制器也可以生成 XML、JSON、PDF、移动端专用视图等等。控制器加载和操作模型,并渲染视图模板以生成合适的 HTTP 响应。在 Rails 中,传入的请求由 Action Dispatch 路由到合适的控制器,控制器类派生自 ActionController::Base
。Action Dispatch 和 Action Controller在 Action Pack 中捆绑在一起。
Active Record、Active Model、Action Pack 和 Action View 均可在 Rails 之外独立使用。
除此之外,Rails 还附带:
$ gem install rails
$ rails new myapp
其中“myapp”是应用程序名称。
$ cd myapp
$ bin/rails server
使用“--help”或“-h”命令运行以获取选项。
访问“http://localhost:3000”,您将看到包含您的 Rails 和 Ruby 版本的 Rails 启动屏幕。
按照指南开始开发您的应用程序。您可能会发现
以下资源很有用:
通过将业务逻辑封装在丰富的对象中,数据库变得栩栩如生。它能够对表之间的关联进行建模,在保存时提供回调,无缝加密敏感数据,并优雅地表达 SQL 查询。
class Article < ApplicationRecord
belongs_to :author, default: -> { Current.user }
has_many :comments
has_one_attached :cover_image
has_rich_text :content, encrypted: true
enum status: %i[ drafted published ]
scope :recent, -> { order(created_at: :desc).limit(25) }
after_save_commit :deliver_later, if: :published?
def byline
"Written by #{author.name} on #{created_at.to_s(:short)}"
end
def deliver_later
Article::DeliveryJob.perform_later(self)
end
end
控制器将域模型公开到 Web,处理传入参数,设置缓存标头,并渲染模板,并以 HTML 或 JSON 格式响应。
class ArticlesController < ApplicationController
def index
@articles = Article.recent
end
def show
@article = Article.find(params[:id])
fresh_when etag: @article
end
def create
article = Article.create!(article_params)
redirect_to article
end
private
def article_params
params.expect(article: [ :title, :content ])
end
end
模板可以充分利用 Ruby 的多功能性,多余的代码被提取到辅助函数中,而领域模型则直接使用并与 HTML 交织在一起。
<h1><%= @article.title %></h1>
<%= image_tag @article.cover_image.url %>
<p><%= @article.content %></p>
<%= link_to "Edit", edit_article_path(@article) if Current.user.admin? %>
使用路由域语言配置 URL 连接到控制器的方式。路由会将一组操作公开为资源:索引、显示、新建、创建、编辑、更新、销毁。
Rails.application.routes.draw do
resources :articles do # /articles, /articles/1
resources :comments # /articles/1/comments, /comments/1
end
root to: "articles#index" # /
end
Ruby on Rails 基于 MIT 许可证 发布。