web-dev-qa-db-fra.com

Où se trouve la page de documentation pour les types de données ActiveRecord?

Je ne trouve pas la page de documentation de l'enregistrement actif qui contient une liste de tous les types de données.

Est-ce que quelqu'un peut m'aider?

72
Blankman

Si vous parlez des types de migrations, par exemple chaîne, entier, datetime, etc., alors vous voulez ActiveRecord :: ConnectionAdapters :: TableDefinition , le colonne méthode. (Édition Rails 5: voir aussi connexion . add_column .)

Depuis cette mise à jour, les types standard sont:

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

L'implémentation de :decimal est différent avec chaque base de données, donc je l'éviterais si possible. Vous pouvez utiliser un type ne figurant pas dans cette liste tant qu'il est pris en charge par votre base de données (par exemple, :polygon dans MySQL), mais cela ne sera pas indépendant de la base de données et devrait également être évité.

105
Mark Thomas

Vous pouvez également voir les types de données ActiveRecord dans les sources. Chaque adaptateur de SGBD contient son propre mappage. Par exemple, dans le cas MySQL, regardez ce fichier: https://github.com/Rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148 ou obtenez-le par cette ligne de code pour l'adaptateur SGBD actuel:

ActiveRecord::Base.connection.native_database_types.keys
6
Psylone

Voici les mappages par défaut des types pour les adaptateurs de base de données:

enter image description hereenter image description here

5
gotqn

Notez que cela est basé sur Rails Code source daté du 13 février 2015 (Rails 4.2)

Au cas où quelqu'un voudrait voir comment ces types de données sont mappés dans la base de données que vous utilisez.

Vous pouvez récupérer facilement à Rails code source sur github.

Par exemple

Rails types de données à mappage de données mysql.

NATIVE_DATABASE_TYPES = {
        :primary_key => "int(11) auto_increment PRIMARY KEY",
        :string      => { :name => "varchar", :limit => 255 },
        :text        => { :name => "text" },
        :integer     => { :name => "int", :limit => 4 },
        :float       => { :name => "float" },
        :decimal     => { :name => "decimal" },
        :datetime    => { :name => "datetime" },
        :time        => { :name => "time" },
        :date        => { :name => "date" },
        :binary      => { :name => "blob" },
        :boolean     => { :name => "tinyint", :limit => 1 }
      }

Trouvé sur https://github.com/Rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148

Et si quelqu'un veut postgreSQL, c'est parti.

NATIVE_DATABASE_TYPES = {
        primary_key: "serial primary key",
        bigserial: "bigserial",
        string:      { name: "character varying" },
        text:        { name: "text" },
        integer:     { name: "integer" },
        float:       { name: "float" },
        decimal:     { name: "decimal" },
        datetime:    { name: "timestamp" },
        time:        { name: "time" },
        date:        { name: "date" },
        daterange:   { name: "daterange" },
        numrange:    { name: "numrange" },
        tsrange:     { name: "tsrange" },
        tstzrange:   { name: "tstzrange" },
        int4range:   { name: "int4range" },
        int8range:   { name: "int8range" },
        binary:      { name: "bytea" },
        boolean:     { name: "boolean" },
        bigint:      { name: "bigint" },
        xml:         { name: "xml" },
        tsvector:    { name: "tsvector" },
        hstore:      { name: "hstore" },
        inet:        { name: "inet" },
        cidr:        { name: "cidr" },
        macaddr:     { name: "macaddr" },
        uuid:        { name: "uuid" },
        json:        { name: "json" },
        jsonb:       { name: "jsonb" },
        ltree:       { name: "ltree" },
        citext:      { name: "citext" },
        point:       { name: "point" },
        bit:         { name: "bit" },
        bit_varying: { name: "bit varying" },
        money:       { name: "money" },
      }
4
MadNik