Rails 4: Elenco dei tipi di dati disponibili


406

Dove posso trovare un elenco di tipi di dati che possono essere utilizzati in Ruby on Rails 4? Ad esempio

  • text
  • string
  • integer
  • float
  • date

Continuo a conoscerne di nuovi e mi piacerebbe avere un elenco a cui potrei facilmente fare riferimento.



1
@MarkThomas: non un duplicato. La mia domanda qui è specifica per Rails 4.
Nicolas Raoul,

La risposta accettata in quella domanda è essenzialmente la stessa della risposta accettata. Entrambi indicano i documenti di Rails 4. Inoltre, è un punto controverso perché i tipi di dati ActiveRecord non sono cambiati da Rails 3 a Rails 4.
Mark Thomas

10
Io per primo non sapevo che i tipi di dati AR non fossero cambiati tra le rotaie 3 e 4, quindi sono grato che questa domanda / risposta sia qui.
Dty

Risposte:


667

Ecco tutti i tipi di dati di Rails 4 (migrazione ActiveRecord):

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

Fonte: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
Questi sono gli stessi di Rails 3 .

Se usi PostgreSQL, puoi anche trarne vantaggio:

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

Vengono archiviati come stringhe se si esegue l'app con un database non PostgreSQL.

Modifica, 2016-set-19:

Ci sono molti più tipi di dati specifici di Postgres in Rails 4 e ancora di più in Rails 5.


1
Credo che questi siano i tipi di dati supportati in tutti i database. Tuttavia, come menziona Peter de Ridder, ci sono alcuni tipi di dati come hstore che sono ancora supportati.
Althaf Hameez,

Domanda: la documentazione di Postgres non sembra avere textun tipo di dati. Tuttavia, le rotaie possono ancora gestirlo? Cosa succede in background?
ahnbizcad,

PostgreSQL ha un tipo di dati di testo. Sotto il cofano tutti i campi varchar / text sono matrici di lunghezza variabile. postgresql.org/docs/9.3/interactive/datatype-character.html
makhan

Vorrei aggiungere che se stai usando un database non postgres e la tua applicazione schema_format non è impostata per usare: sql, il tuo file schema.rb non sarà in grado di scaricare la tabella che usa tipi come: json. Lo schema verrà comunque scaricato per le tabelle che utilizzano tipi predefiniti, ma vedrai un commento per la tabella con tipi speciali come "Impossibile eseguire il dump della tabella ...". Guarda qui per impostare lo schema_formato .
bpercevic,

Inoltre, quelle colonne avranno il tipo nilin un database non postgres. È possibile controllare il tipo nella console con Model.columns_hash["column_name"].type. Queste sono solo cose che ho incontrato durante l'utilizzo: tipo di colonna json, potrei sbagliarmi e questo potrebbe non succedere a tutti, ma ho pensato di far sapere ai futuri lettori nel caso avessero problemi. Indipendentemente da ciò, +1 per questa risposta perché mi ha davvero aiutato.
bpercevic,

249

Potresti anche trovare utile sapere in genere a cosa servono questi tipi di dati:

Ci sono anche riferimenti usati per creare associazioni. Ma non sono sicuro che si tratti di un tipo di dati reale .

Nuovi tipi di dati Rails 4 disponibili in PostgreSQL:

  • :hstore- memorizzazione di coppie chiave / valore in un singolo valore ( ulteriori informazioni su questo nuovo tipo di dati )
  • :array- una disposizione di numeri o stringhe in una particolare riga ( scopri di più e vedi esempi )
  • :cidr_address - utilizzato per indirizzi host IPv4 o IPv6
  • :inet_address - utilizzato per gli indirizzi host IPv4 o IPv6, come per cidr_address ma accetta anche valori con bit diversi da zero a destra della maschera di rete
  • :mac_address - utilizzato per gli indirizzi host MAC

Ulteriori informazioni sui tipi di dati dell'indirizzo qui e qui .

Inoltre, ecco la guida ufficiale sulle migrazioni: http://edgeguides.rubyonrails.org/migrations.html


13
Applausi. +1 per completezza e anticipazione dell'uso. Questa è la mentalità UX proprio lì.
ahnbizcad,

5
Risposta assolutamente fantastica - molte grazie per questo. I collegamenti agli articoli sulle differenze mi hanno letteralmente escluso le domande.
nlh,

3
Per Postgres esiste inoltre un uuidtipo che può essere utilizzato come campo normale come t.uuid :name... o come chiave primaria come create_table :users, id: :uuid do...o ad es.t.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
TNT

1
Altri tipi PostgreSQL supportati da Rails elencati nei documenti API perActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods . Importanti anche money, json, xml,daterange
Eliot Sykes

1
Sì, uuid è stato aggiunto per Postgres, ma non viene restituito con un record attivo create (). Questo problema è stato risolto con Rails 5?
Martin Sommer,

156

È importante conoscere non solo i tipi ma anche il mapping di questi tipi ai tipi di database:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Fonte aggiunta - Sviluppo Web agile con Rails 4


1
Sarei interessato a vedere il tipo json in questa tabella, se ti senti all'altezza
Freedom_Ben

2
Puoi sempre controllare l' NATIVE_DATABASE_TYPESadattatore di cui hai bisogno - github.com/rails/rails/blob/master/activerecord/lib/…
gotqn

C'è un punto sulle guide o un'unica fonte di verità per queste cose nel tempo?
Hugo,

81

Puoi accedere a questo elenco ogni volta che vuoi (anche se non hai accesso a Internet) tramite:

rails generate model -h

5

Rails4 ha aggiunto alcuni tipi di dati per Postgres.

Ad esempio, railscast # 400 ne nomina due:

Rails 4 ha il supporto per i tipi di dati nativi in ​​Postgres e ne mostreremo due qui, sebbene ne siano supportati molti di più: array e hstore. È possibile memorizzare matrici in una colonna di tipo stringa e specificare il tipo per hstore.

Inoltre, puoi anche usare cidr, inet e macaddr. Per maggiori informazioni:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.