Carriles 4: lista de tipos de datos disponibles

406

¿Dónde puedo encontrar una lista de tipos de datos que se pueden usar en Ruby on Rails 4? Como

  • text
  • string
  • integer
  • float
  • date

Sigo aprendiendo sobre nuevos y me encantaría tener una lista a la que pueda referirme fácilmente.

Nicolas Raoul
fuente
1
@ MarkThomas: No es un duplicado. Mi pregunta aquí es específicamente para Rails 4.
Nicolas Raoul
La respuesta aceptada en esa pregunta es esencialmente la misma que su respuesta aceptada. Ambos apuntan a los Rails 4 docs. Además, es un punto discutible porque los tipos de datos ActiveRecord no cambiaron de Rails 3 a Rails 4.
Mark Thomas
10
Por mi parte, no sabía que los tipos de datos AR no cambiaron entre los rieles 3 y 4, así que estoy agradecido de que esta pregunta / respuesta esté aquí.
Dty

Respuestas:

667

Aquí están todos los tipos de datos Rails 4 (migración ActiveRecord):

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

Fuente: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
Estos son los mismos que con Rails 3 .

Si usa PostgreSQL, también puede aprovechar estos:

  • :hstore
  • :json
  • :jsonb
  • :array
  • :cidr_address
  • :ip_address
  • :mac_address

Se almacenan como cadenas si ejecuta su aplicación con una base de datos no PostgreSQL.

Edición, 19 de septiembre de 2016:

Hay muchos más tipos de datos específicos de postgres en Rails 4 e incluso más en Rails 5.

Nicolas Raoul
fuente
1
Creo que estos son los tipos de datos que son compatibles con todas las bases de datos. Sin embargo, como menciona Peter de Ridder, hay algunos tipos de datos como hstore que todavía son compatibles.
Althaf Hameez
Pregunta: la documentación de postgres no parece tener texttipo de datos. ¿Sin embargo, los rieles aún pueden manejarlo? ¿Qué sucede en el fondo?
ahnbizcad
PostgreSQL tiene un tipo de datos de texto. Bajo el capó, todos los campos varchar / text son matrices de longitud variable. postgresql.org/docs/9.3/interactive/datatype-character.html
makhan
Me gustaría agregar que si está utilizando una base de datos no postgres y su aplicación schema_format no está configurada para usar: sql, entonces su archivo schema.rb no podrá volcar la tabla que usa tipos como: json. El esquema seguirá siendo volcado para las tablas que usan tipos predeterminados, pero verá un comentario para la tabla con tipos especiales como "no se pudo volcar la tabla ...". Mire aquí para establecer el formato de esquema .
bpercevic
Además, esas columnas tendrán tipo nilen una base de datos no postgres. Puede inspeccionar el tipo en la consola con Model.columns_hash["column_name"].type. Estas son solo cosas con las que me he encontrado al usar: tipo de columna json, puedo estar equivocado y esto puede no sucederle a todos, pero pensé en informar a los futuros lectores en caso de que tengan problemas. De todos modos, +1 para esta respuesta porque realmente me ayudó.
bpercevic
249

También puede resultarle útil saber en general para qué se utilizan estos tipos de datos:

También hay referencias utilizadas para crear asociaciones. Pero, no estoy seguro de que este sea un tipo de datos real .

Nuevos tipos de datos de Rails 4 disponibles en PostgreSQL:

  • :hstore- almacenar pares clave / valor dentro de un solo valor ( obtenga más información sobre este nuevo tipo de datos )
  • :array- una disposición de números o cadenas en una fila particular ( aprenda más sobre esto y vea ejemplos )
  • :cidr_address - utilizado para direcciones de host IPv4 o IPv6
  • :inet_address - se usa para direcciones de host IPv4 o IPv6, igual que cidr_address pero también acepta valores con bits distintos de cero a la derecha de la máscara de red
  • :mac_address - utilizado para direcciones de host MAC

Obtenga más información sobre los tipos de datos de dirección aquí y aquí .

Además, aquí está la guía oficial sobre migraciones: http://edgeguides.rubyonrails.org/migrations.html

lflores
fuente
13
Aplausos. +1 por minuciosidad y anticipación de uso. Esa es la mentalidad UX allí mismo.
ahnbizcad
55
Respuesta absolutamente excelente, muchas gracias por esto. Los enlaces a los artículos sobre diferencias literalmente me sacaron las preguntas de la boca.
nlh
3
Para Postgres, además, hay un uuidtipo que se puede usar como campo normal como t.uuid :name... o como clave principal como create_table :users, id: :uuid do...o por ejemplot.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
TNT
1
Tipos adicionales de PostgreSQL compatibles con Rails enumerados en los documentos de API paraActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods . Los puntos culminantes incluyen money, json, xml,daterange
Eliot Sykes
1
Sí, se agregó uuid para Postgres, pero no se devuelve con un registro activo create (). ¿Se ha solucionado ese problema con Rails 5?
Martin Sommer
156

Es importante conocer no solo los tipos, sino también la asignación de estos tipos a los tipos de bases de datos:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


Fuente agregada - Desarrollo web ágil con Rails 4

gotqn
fuente
1
Me gustaría ver el tipo json en esta tabla, si te apetece
Freedom_Ben
2
Siempre puede verificar el NATIVE_DATABASE_TYPESadaptador que necesita - github.com/rails/rails/blob/master/activerecord/lib/…
gotqn
¿Hay un lugar en las guías o una única fuente de verdad para estas cosas con el tiempo?
Hugo
81

Puede acceder a esta lista cada vez que lo desee (incluso si no tiene acceso a Internet) a través de:

rails generate model -h
tomascharad
fuente
5

Rails4 tiene algunos tipos de datos agregados para Postgres.

Por ejemplo, railscast # 400 nombra dos de ellos:

Rails 4 es compatible con los tipos de datos nativos en Postgres y mostraremos dos de estos aquí, aunque se admiten muchos más: array y hstore. Podemos almacenar matrices en una columna de tipo cadena y especificar el tipo para hstore.

Además, también puedes usar cidr, inet y macaddr. Para más información:

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

Peter de Ridder
fuente