ActiveRecord 数据类型的文档页在哪里?

我找不到有所有数据类型列表的活动记录文档页面。

有人能帮帮我吗?

42644 次浏览

如果你讨论的是迁移的类型,例如 string、 int、 datetime 等,那么你需要 < strong > ActiveRecord: : ConnectionAdapters: : TableDefinition ,即 < strong > 栏 方法。(Rails 5 edit: see also connect. > add _ column .)

截至本次更新,标准类型如下:

  • :primary_key
  • :string
  • :text
  • :integer
  • :bigint
  • :float
  • :decimal
  • :numeric
  • :datetime
  • :time
  • :date
  • :binary
  • :boolean

:decimal的实现对于每个数据库都是不同的,所以如果可能的话我会尽量避免使用它。只要您的数据库(例如,MySQL 中的 :polygon)支持,您可以使用不在此列表中的类型,但是这不是与数据库无关的,也应该避免。

您还可以在源代码中看到 ActiveRecord 数据类型。每个 DBMS 适配器都包含自己的映射。例如,在 MySQL 中,查看这个文件: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148或通过当前 DBMS 适配器的这行代码获取它:

ActiveRecord::Base.connection.native_database_types.keys

下面是数据库适配器的默认类型映射:

enter image description here enter image description here

注意,这是基于2015年2月13日的 Rails 源代码(Rails 4.2)

如果有人想知道这些数据类型是如何映射到您正在使用的数据库中的。

您可以在 github 上轻松获取 Rails 源代码。

比如说

将数据类型映射为 mysql 数据类型。

NATIVE_DATABASE_TYPES = {
:primary_key => "int(11) auto_increment PRIMARY KEY",
:string      => { :name => "varchar", :limit => 255 },
:text        => { :name => "text" },
:integer     => { :name => "int", :limit => 4 },
:float       => { :name => "float" },
:decimal     => { :name => "decimal" },
:datetime    => { :name => "datetime" },
:time        => { :name => "time" },
:date        => { :name => "date" },
:binary      => { :name => "blob" },
:boolean     => { :name => "tinyint", :limit => 1 }
}

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148发现的

如果有人想要 postgreSQL,你可以去。

NATIVE_DATABASE_TYPES = {
primary_key: "serial primary key",
bigserial: "bigserial",
string:      { name: "character varying" },
text:        { name: "text" },
integer:     { name: "integer" },
float:       { name: "float" },
decimal:     { name: "decimal" },
datetime:    { name: "timestamp" },
time:        { name: "time" },
date:        { name: "date" },
daterange:   { name: "daterange" },
numrange:    { name: "numrange" },
tsrange:     { name: "tsrange" },
tstzrange:   { name: "tstzrange" },
int4range:   { name: "int4range" },
int8range:   { name: "int8range" },
binary:      { name: "bytea" },
boolean:     { name: "boolean" },
bigint:      { name: "bigint" },
xml:         { name: "xml" },
tsvector:    { name: "tsvector" },
hstore:      { name: "hstore" },
inet:        { name: "inet" },
cidr:        { name: "cidr" },
macaddr:     { name: "macaddr" },
uuid:        { name: "uuid" },
json:        { name: "json" },
jsonb:       { name: "jsonb" },
ltree:       { name: "ltree" },
citext:      { name: "citext" },
point:       { name: "point" },
bit:         { name: "bit" },
bit_varying: { name: "bit varying" },
money:       { name: "money" },
}