模型与 Active Record
Rails 模型与 Active Record 约定简介
模型
Rails 模型是一个 Ruby 类,它允许你以便捷的方式向数据库中添加记录。通常,你的模型应提供以下四种基本功能:
- 创建:能够将数据添加到记录中
- 读取:能够查找已存储在数据库中的特定数据
- 更新:能够修改现有数据
- 删除:能够移除数据
这四项功能或操作统称为 CRUD,即“创建、读取、更新、删除”的缩写。
Rails 使用 Active Record 框架来简化模型的创建与使用。
什么是 Active Record?
Active Record 是一种 对象关系映射(ORM)框架,它能够将应用程序中的对象与 关系型数据库管理系统(RDBMS)中的数据表进行连接。
通过使用 ORM,Active Record 无需直接编写 SQL 语句,即可更轻松地存储和检索应用程序中对象的属性及它们之间的关系。
Active Record 为你提供了数据库表与执行操作的 Ruby 代码之间的接口。Active Record 的结构会自动根据数据库表中的字段名生成对应的 Ruby 方法名。
Active Record 中的命名约定
遵循 Rails 和 Active Record 的命名规范,可以大大简化数据库管理。你不需要编写大量配置代码,而这是其他 ORM 框架通常需要的。
Active Record 使用的命名规范如下:
- 模型/类名:单数形式,每个单词首字母大写(例如:SaleItem)
- 表/模式名:复数形式,单词之间用下划线分隔(例如:sale_items)
Rails 在查找数据库表时,会将模型/类名复数化。如果类名由两个单词组成,则必须使用 驼峰命名法(CamelCase)。因此,对于名为 Item 的类,其对应的数据库表应为 items。
下表总结了命名规范:
| 模型/类名 | 表/模式名 |
|---|---|
| Item | items |
| ItemSale | item_sales |
| Child | children |
| Mouse | mice |
注意:你可能已经注意到,Rails 能够正确处理不规则复数形式的单词。虽然你可以偏离这些约定,但在这种情况下需要显式配置。
创建新模型
假设你正在构建一个 宠物商店 应用程序,你需要一种方式来存储每只宠物的信息。这些信息可能包括属性如 名称 和 年龄。
为了存储这些信息,你需要一个数据库以及一个用于与数据库交互的模型。
让我们创建一个新的 pet_store 应用程序,以便更好地理解 CRUD 操作。
1rails new pet_store
创建新模型的一般命令是:
1rails generate model ModelName ColumnName:ColumnType ColumnName:ColumnType
接下来,在项目文件夹中运行以下命令来生成新的模型:
1rails generate model Pet name:string age:string
该命令将为你生成 2 个新文件(实际上共 4 个,但目前可以忽略测试文件):
| 文件路径 | 用途 |
|---|---|
db/migrate/<日期时间>_create_pets.rb | 这是迁移文件。<日期时间> 是 Rails 自动生成的时间戳,用于确定迁移的执行顺序。 |
app/models/pet.rb | 这是模型文件。关联关系、验证规则等都在此定义。 |
运行 rake db:migrate 将更新数据库结构并创建 pets 表。每个模型对象还会自动生成一个 id 属性。因此,你的 pets 表将包含 id、name 和 age 三个字段。