Rails 4:可用数据类型列表

438

我在哪里可以找到适用于Ruby on Rails 4的数据类型列表?

  • text (文本)
  • string (字符串)
  • integer (整数)
  • float (浮点数)
  • date(日期)

我不停地学习新的数据类型,因此我很想有一个可以轻松参考的列表。


1
可能是ActiveRecord数据类型文档页面在哪里?的重复问题。 - Mark Thomas
1
@MarkThomas:这不是重复问题。我的问题是针对Rails 4的。 - Nicolas Raoul
那个问题中被接受的答案本质上与您被接受的答案相同。两者都指向Rails 4文档。此外,这是一个无意义的观点,因为ActiveRecord数据类型从Rails 3到Rails 4没有改变。 - Mark Thomas
10
我个人不知道在Rails 3和4之间AR数据类型没有改变,所以我很感激这个问题/答案在这里。 - Dty
5个回答

724

以下是所有Rails 4(ActiveRecord migration)数据类型:

  • :binary:二进制数据
  • :boolean:布尔值,true/false
  • :date:日期
  • :datetime:日期和时间
  • :decimal:高精度小数
  • :float:浮点数
  • :integer:整数
  • :bigint:64位整数
  • :primary_key:主键
  • :references:外键引用
  • :string:短字符串,长度限制255字符
  • :text:长文本,长度不限
  • :time:时间
  • :timestamp:时间戳

来源:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
这些和Rails 3相同。

如果您使用PostgreSQL,还可以利用以下数据类型:

  • :hstore:散列存储
  • :json:JSON格式存储
  • :jsonb:二进制JSON格式存储
  • :array:数组
  • :cidr_address:CIDR地址类型
  • :ip_address:IP地址类型
  • :mac_address:MAC地址类型

如果使用非PostgreSQL数据库运行应用程序,则以上数据类型会以字符串形式存储。

更多PostgreSQL数据类型

  • Rails 5
  • Rails 6
  • Rails 7
  • 这些链接指向 Rails 框架中的 PostgreSQL 数据库适配器文件。分别对应 Rails 5、Rails 6 和 Rails 7 版本。

    1
    我相信这些数据类型在所有数据库中都得到了支持。然而,正如Peter de Ridder所提到的,仍然有一些数据类型(例如hstore)得到了支持。 - Althaf Hameez
    PostgreSQL确实有文本数据类型。在底层,所有的varchar/text字段都是可变长度数组。http://www.postgresql.org/docs/9.3/interactive/datatype-character.html - makhan
    1
    我想补充一点,如果您使用的是非Postgres数据库,并且应用程序的schema_format未设置为使用:sql,则您的schema.rb文件将无法转储使用像:json这样的类型的表。对于使用默认类型的表,仍将转储模式,但是对于具有特殊类型的表,您将看到一个注释,如“无法转储表...”。在此处查看设置schema_format的方法 - bpercevic
    1
    此外,在非Postgres数据库中,这些列将具有类型nil。您可以使用Model.columns_hash["column_name"].type在控制台中检查类型。这些只是我在使用:json列类型时遇到的问题,我可能是错误的,这可能不会发生在每个人身上,但我想让未来的读者知道以防他们遇到麻烦。无论如何,对于这个答案的+1,因为它真的帮了我一个大忙。 - bpercevic
    我还想添加:jsonb。区别在于:“json数据类型存储输入文本的精确副本,处理函数必须在每次执行时重新解析;而jsonb数据以分解的二进制格式存储,由于增加了转换开销,因此输入速度略慢,但处理速度显着提高,因为不需要重新解析。 jsonb还支持索引,这可能是一个重要的优势。” http://www.postgresql.org/docs/9.4/static/datatype-json.html - Robbie Guilfoyle
    显示剩余2条评论

    267

    你可能也会发现了解这些数据类型的常规用途非常有用:

    还有用于创建关联的 references。但是,我不确定这是否是一种实际的数据类型

    PostgreSQL 中可用的新 Rails 4 数据类型:

    在此处了解有关地址数据类型的更多信息此处

    此外,这里是迁移的官方指南: http://edgeguides.rubyonrails.org/migrations.html


    14
    鼓掌。+1 是因为彻底性和对使用的预期,这就是用户体验的心态。 - ahnbizcad
    5
    非常棒的回答,非常感谢。关于差异的文章链接完美地回答了我的问题。 - nlh
    3
    对于Postgres数据库,另外还有一种 uuid 类型,可以像普通字段一样使用,例如 t.uuid :name...,也可以用作主键,例如 create_table :users, id: :uuid do... 或者 t.primary_key :id, :uuid, :default => 'uuid_generate_v1()' - TNT
    1
    Rails支持的其他PostgreSQL类型在ActiveRecord :: ConnectionAdapters :: PostgreSQL :: ColumnMethodsAPI文档中列出。其中包括moneyjsonxmldaterange等亮点。 - Eliot Sykes
    1
    是的,Postgres 已经添加了 uuid,但它不会在 Active Record create() 中返回。这个问题在 Rails 5 中已经解决了吗? - Martin Sommer
    现在在Rails5中不是“inet_address”,而是“inet”。 - mcr

    165

    1
    如果您感兴趣的话,我很想在这个表格中看到JSON类型。 - Freedom_Ben
    3
    你可以随时查看所需适配器的 NATIVE_DATABASE_TYPES - https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb#L106 - gotqn
    1
    这些事情随着时间的推移是否有一个指南或唯一的真理来源? - Hugo
    datedatetime在Oracle数据库中都被映射为date。当Active Record进行数据获取时,它是如何确定应该映射到哪种数据类型的呢? - Ali Akbar
    datedatetime在Oracle数据库中都被映射为date类型。在获取数据时,Active Record是如何确定应该映射到哪种数据类型的呢? - undefined

    89

    您随时都可以通过以下方式访问此列表(即使您没有互联网连接):

    rails generate model -h
    

    在“可用字段类型:”部分 - yohanes

    5
    Rails4为Postgres添加了一些数据类型。
    例如,railscast#400列出了其中两个:
    Rails 4支持Postgres的本地数据类型,我们将在此展示其中两个,尽管还支持更多:数组和hstore。我们可以将数组存储在字符串类型的列中,并指定hstore的类型。
    此外,您还可以使用cidr、inet和macaddr。有关更多信息,请参见:

    https://blog.engineyard.com/2013/new-in-rails-4


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接