Rails 4:可用数据类型列表
Posted
技术标签:
【中文标题】Rails 4:可用数据类型列表【英文标题】:Rails 4: List of available datatypes 【发布时间】:2013-07-28 21:26:45 【问题描述】:在哪里可以找到可在 Ruby on Rails 4 中使用的数据类型列表? 比如
text
string
integer
float
date
我一直在学习新的,我很想有一个我可以轻松参考的列表。
【问题讨论】:
Where is the documentation page for ActiveRecord data types? 的可能重复项 @MarkThomas:不是重复的。我的问题是专门针对 Rails 4 的。 该问题中接受的答案与您接受的答案基本相同。两者都指向 Rails 4 文档。此外,这是一个有争议的问题,因为 ActiveRecord 数据类型没有从 Rails 3 更改为 Rails 4。 我不知道 AR 数据类型在 Rails 3 和 Rails 4 之间没有变化,所以我很感激这个问题/答案就在这里。 【参考方案1】:这里是所有 Rails 4(ActiveRecord 迁移)数据类型:
:binary
:boolean
:date
:datetime
:decimal
:float
:integer
:bigint
:primary_key
:references
:string
:text
:time
:timestamp
来源:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column 这些与Rails 3 相同。
如果您使用 PostgreSQL,您还可以利用这些优势:
:hstore
:json
:jsonb
:array
:cidr_address
:ip_address
:mac_address
如果您使用非 PostgreSQL 数据库运行应用程序,它们将存储为字符串。
编辑,2016 年 9 月 19 日:
Rails 4 中有 a lot more postgres 特定数据类型,Rails 5 中有 even more。
【讨论】:
我相信这些是所有数据库都支持的数据类型。然而,正如 Peter de Ridder 提到的,仍然支持一些数据类型,如 hstore。 问题:postgres 文档似乎没有text
数据类型。然而,rails 仍然可以处理它吗?后台发生了什么?
PostgreSQL 确实有一个文本数据类型。在引擎盖下,所有 varchar/text 字段都是可变长度数组。 postgresql.org/docs/9.3/interactive/datatype-character.html
我想补充一点,如果您使用的是非 postgres 数据库并且您的应用程序 schema_format 未设置为使用 :sql,那么您的 schema.rb 文件将无法转储表使用 :json 之类的类型。对于使用默认类型的表,架构仍将被转储,但您会看到具有特殊类型的表的注释,例如“无法转储表...”。 Look here to set the schema_format.
此外,这些列在非 postgres 数据库中的类型为 nil
。您可以使用Model.columns_hash["column_name"].type
在控制台中检查类型。这些只是我在使用 :json 列类型时遇到的问题,我可能是错的,这可能不会发生在每个人身上,但我想我会让未来的读者知道,以防他们遇到麻烦。无论如何,为这个答案 +1,因为它真的对我有帮助。【参考方案2】:
Rails4 为 Postgres 添加了一些数据类型。
例如,railscast #400 命名其中两个:
Rails 4 在 Postgres 中支持本机数据类型,我们将在此处展示其中的两个,尽管支持更多:array 和 hstore。我们可以将数组存储在字符串类型的列中,并为 hstore 指定类型。
此外,您还可以使用 cidr、inet 和 macaddr。欲了解更多信息:
https://blog.engineyard.com/2013/new-in-rails-4
【讨论】:
【参考方案3】:您可能还会发现大致了解这些数据类型的用途很有用:
:string
- 用于标题等小数据类型。 (Should you choose string or text?)
:text
- 用于较长的文本数据,例如一段信息
:binary
- 用于存储图像、音频或电影等数据。
:boolean
- 用于存储真值或假值。
:date
- 只存储日期
:datetime
- 将日期和时间存储到列中。
:time
- 只限时间
:timestamp
- 用于将日期和时间存储到列中。(What's the difference between datetime and timestamp?)
:decimal
- 用于小数 (example of how to use decimals)。
:float
- 用于小数。 (What's the difference between decimal and float?)
:integer
- 代表整数。
:primary_key
- 可以唯一标识表中每一行的唯一键
还有用于创建关联的引用。但是,I'm not sure this is an actual data type。
PostgreSQL 中可用的新 Rails 4 数据类型:
:hstore
- 将键/值对存储在单个值中 (learn more about this new data type)
:array
- 特定行中数字或字符串的排列 (learn more about it and see examples)
:cidr_address
- 用于 IPv4 或 IPv6 主机地址
:inet_address
- 用于 IPv4 或 IPv6 主机地址,与 cidr_address 相同,但它也接受网络掩码右侧具有非零位的值
:mac_address
- 用于 MAC 主机地址
详细了解地址数据类型here 和here。
另外,这里是关于迁移的官方指南:http://edgeguides.rubyonrails.org/migrations.html
【讨论】:
掌声。 +1 表示彻底性和使用预期。这就是用户体验的心态。 非常棒的答案 - 非常感谢。关于差异的文章的链接从字面上把问题从我嘴里问出来了。 对于 Postgres,还有一个uuid
类型,可以用作 普通字段,如 t.uuid :name...
或作为主键,如 create_table :users, id: :uuid do...
或例如t.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
Rails 支持的其他 PostgreSQL 类型在 API docs for ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods
中列出。重点包括money
、json
、xml
、daterange
是的,为 Postgres 添加了 uuid,但它没有与 Active Record create() 一起返回。 Rails 5 解决了这个问题吗?【参考方案4】:
不仅要了解类型,还要了解这些类型到数据库类型的映射:
来源已添加 - Agile Web Development with Rails 4
【讨论】:
如果你愿意的话,我很想看看这个表中的 json 类型 您可以随时查看NATIVE_DATABASE_TYPES
以获得您需要的适配器 - github.com/rails/rails/blob/master/activerecord/lib/…
随着时间的推移,这些事情的指南上是否有一个点或单一的事实来源?【参考方案5】:
您可以随时通过以下方式访问此列表(即使您无法访问 Internet):
rails generate model -h
【讨论】:
在“可用字段类型:”部分以上是关于Rails 4:可用数据类型列表的主要内容,如果未能解决你的问题,请参考以下文章