Schienen 4: Liste der verfügbaren Datentypen

406

Wo finde ich eine Liste der Datentypen, die in Ruby on Rails 4 verwendet werden können? Sowie

  • text
  • string
  • integer
  • float
  • date

Ich lerne immer wieder über neue und würde gerne eine Liste haben, auf die ich mich leicht beziehen kann.

Nicolas Raoul
quelle
1
@ MarkThomas: Kein Duplikat. Meine Frage hier ist speziell für Rails 4.
Nicolas Raoul
Die akzeptierte Antwort in dieser Frage entspricht im Wesentlichen Ihrer akzeptierten Antwort. Beide verweisen auf die Rails 4-Dokumente. Es ist auch ein strittiger Punkt, da sich die ActiveRecord-Datentypen nicht von Rails 3 auf Rails 4 geändert haben.
Mark Thomas
10
Ich wusste nicht, dass sich die AR-Datentypen zwischen den Schienen 3 und 4 nicht geändert haben, daher bin ich dankbar, dass diese Frage / Antwort hier ist.
Dty

Antworten:

667

Hier sind alle Rails 4-Datentypen (ActiveRecord-Migration):

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

Quelle: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
Dies sind die gleichen wie bei Rails 3 .

Wenn Sie PostgreSQL verwenden, können Sie auch Folgendes nutzen:

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

Sie werden als Zeichenfolgen gespeichert, wenn Sie Ihre App mit einer Nicht-PostgreSQL-Datenbank ausführen.

Bearbeiten, 19.09.2016:

In Rails 4 gibt es viel mehr postgres-spezifische Datentypen und in Rails 5 noch mehr .

Nicolas Raoul
quelle
1
Ich glaube, dies sind die Datentypen, die in allen Datenbanken unterstützt werden. Wie Peter de Ridder erwähnt, gibt es jedoch einige Datentypen wie hstore, die weiterhin unterstützt werden.
Althaf Hameez
Frage: Die Postgres-Dokumentation scheint keinen textDatentyp zu haben . Trotzdem können Schienen damit umgehen? Was ist im Hintergrund los?
Ahnbizcad
PostgreSQL hat einen Textdatentyp. Unter der Haube sind alle Varchar- / Textfelder Arrays variabler Länge. postgresql.org/docs/9.3/interactive/datatype-character.html
Makhan
Ich möchte hinzufügen, dass, wenn Sie eine Nicht-Postgres-Datenbank verwenden und Ihre Anwendung schema_format nicht auf: sql eingestellt ist, Ihre schema.rb-Datei die Tabelle, die Typen wie: json verwendet, nicht sichern kann. Das Schema wird weiterhin für die Tabellen ausgegeben, die Standardtypen verwenden, es wird jedoch ein Kommentar für die Tabelle mit speziellen Typen wie "Tabelle konnte nicht ausgegeben werden ..." angezeigt. Schauen Sie hier, um das Schema_Format festzulegen .
Bpercevic
Außerdem haben diese Spalten einen Typ nilin einer Nicht-Postgres-Datenbank. Sie können den Typ in der Konsole mit überprüfen Model.columns_hash["column_name"].type. Dies sind nur Dinge, auf die ich bei der Verwendung gestoßen bin: json-Spaltentyp, ich kann mich irren und dies kann nicht jedem passieren, aber ich dachte, ich würde zukünftige Leser informieren, falls sie Probleme haben. Unabhängig davon +1 für diese Antwort, weil es mir wirklich geholfen hat.
Bpercevic
249

Möglicherweise ist es auch hilfreich, allgemein zu wissen, wofür diese Datentypen verwendet werden:

Es gibt auch Referenzen, die zum Erstellen von Assoziationen verwendet werden. Aber ich bin nicht sicher , dies ist ein tatsächlicher Datentyp .

Neue Rails 4-Datentypen in PostgreSQL verfügbar:

  • :hstore- Speichern von Schlüssel / Wert-Paaren in einem einzelnen Wert ( erfahren Sie mehr über diesen neuen Datentyp )
  • :array- eine Anordnung von Zahlen oder Zeichenfolgen in einer bestimmten Zeile ( erfahren Sie mehr darüber und sehen Sie sich Beispiele an )
  • :cidr_address - Wird für IPv4- oder IPv6-Hostadressen verwendet
  • :inet_address - Wird für IPv4- oder IPv6-Hostadressen verwendet, wie cidr_address, akzeptiert jedoch auch Werte mit Bits ungleich Null rechts von der Netzmaske
  • :mac_address - wird für MAC-Hostadressen verwendet

Erfahren Sie hier und hier mehr über die Adressdatentypen .

Hier ist auch der offizielle Leitfaden zu Migrationen: http://edgeguides.rubyonrails.org/migrations.html

lflores
quelle
13
Beifall. +1 für Gründlichkeit und Vorwegnahme der Nutzung. Das ist genau dort UX-Mentalität.
Ahnbizcad
5
Absolut tolle Antwort - vielen Dank dafür. Die Links zu den Artikeln über Unterschiede haben mir die Fragen buchstäblich aus dem Mund genommen.
nlh
3
Für Postgres gibt es zusätzlich einen uuidTyp, der als normales Feld wie t.uuid :name... oder als Primärschlüssel wie create_table :users, id: :uuid do...oder zB verwendet werden kannt.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
TNT
1
Zusätzliche PostgreSQL-Typen, die von Rails unterstützt werden, sind in den API-Dokumenten für aufgeführtActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods . Höhepunkte sind money, json, xml,daterange
Eliot Sykes
1
Ja, uuid wurde für Postgres hinzugefügt, wird jedoch nicht mit einem Active Record create () zurückgegeben. Wurde dieses Problem mit Rails 5 behoben?
Martin Sommer
156

Es ist wichtig, nicht nur die Typen zu kennen, sondern auch die Zuordnung dieser Typen zu den Datenbanktypen:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


Quelle hinzugefügt - Agile Webentwicklung mit Rails 4

gotqn
quelle
1
Es würde mich interessieren, den JSON-Typ in dieser Tabelle zu sehen, wenn Sie Lust dazu haben
Freedom_Ben
2
Sie können jederzeit NATIVE_DATABASE_TYPESnach dem Adapter
suchen,
Gibt es einen Punkt in den Leitfäden oder eine einzige Quelle der Wahrheit für diese Dinge im Laufe der Zeit?
Hugo
81

Sie können jederzeit auf diese Liste zugreifen (auch wenn Sie keinen Internetzugang haben) über:

rails generate model -h
Tomascharad
quelle
5

Rails4 hat einige zusätzliche Datentypen für Postgres.

In Railscast Nr. 400 werden beispielsweise zwei davon genannt:

Rails 4 unterstützt native Datentypen in Postgres, und wir werden hier zwei davon zeigen, obwohl noch viel mehr unterstützt werden: Array und Hstore. Wir können Arrays in einer Spalte vom Typ String speichern und den Typ für hstore angeben.

Außerdem können Sie auch cidr, inet und macaddr verwenden. Für mehr Informationen:

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

Peter de Ridder
quelle