version: rails4
2. 在Active Record中,约定俗成取代配置文件
当在写应用程序时,使用其他的编程语言或者框架,可能会需要写大量的配置相关的代码。一般来说这确实存在于ORM框架中。然而,如果你遵守Rails中的一些约定,当创建Active Record模型时,你将只需写少量的配置代码(在有些情况下甚至没有配置)。建议就是,如果在大多数时候你都是用同一种方式来配置你的应用程序,那么这就应该是默认的方式。因此,明确的配置只会在某些情况下是需要的,尤其是在你不能够适用标准约定的时候。
2.1 Naming Conventions
命名约定
默认的情况下,Active Record会用一些命名约定来找出在models和数据表之间的映射是如何被创建的。Rails会把你的类名复数化,用来找到对应的数据表。因此,对于一个类Book,你应该有一个数据表名称为books。Rails的复数化机制是非常强大的,对于规则和不规则单词都能够复数化(单数化)。当适用的类名由两个或者更多的单词构成,model的类名应该遵守Ruby的约定,用驼峰命名法,而数据表名的单词间则必须用下划线来间隔。例如:
- 数据表----复数化是对于下划线间隔后的单词(e.g.,
book_clubs
) - model类名——单数化是对于每个单词的第一个字母要大写(e.g.,
BookClub
)
Table / Schema |
---|
posts |
line_items |
deers |
mice |
people |
Model / Class |
---|
Post |
LineItem |
Deer |
Mouse |
Person |
2.2 Schema Conventions
约定模式
Active Record对于数据表中的列使用命名约定,是取决于这些列的目的。
- 外键 Foreign keys ——这些字段的命名应该遵循下面的模式
singularized_table_name_id
(e.g.,item_id
,order_id
). 当你创建models之间关联的时候,这些是Active Record将去寻找的字段。 - 主键 Primary keys —— 默认的情况下,Active Record将会使用一个整数列来命名id,作为table的主键。当使用Active Record 迁移( Active Record Migrations)来创建你的数据表,这个列会自动被创建。
这儿还有一些可选项的列名,将会增加一些额外的特征到Active Record实例中:
- created_at —— 当记录首次被创建时,自动获取当时的日期时间。
- updated_at —— 无论何时记录被修改时,自动获取当时的日期时间。
- lock_version —— 对于一个model增加乐观锁定 optimistic locking
- type —— model使用单表继承的说明 Single Table Inheritance.
- (assoiciation_name)_type —— 保存多态性的类型 polymorphic associations.
- (table_name)_count —— 用来缓存属于对象关联性的数量
例如,一个列 comments_count在一个类Post中,有许多Comment的实例将会缓存对于每一个post中存在的comments的数量。
p.s.
而这些列名是可选的,事实上他们都是被Active Record所保留的。避开这些保留的关键词,除非你想要实现特别的功能。例如,type是一个保留词,用来指定一个数据表使用单表继承(STI)。如果你没有使用STI,可以尝试一个类似的关键词,就像“context”,可以依旧精确地描述你所建模的数据。
original text: