web-dev-qa-db-ja.com

ActiveRecordデータ型のドキュメントページはどこにありますか?

すべてのデータタイプのリストがあるアクティブなレコードドキュメントページが見つかりません。

誰か助けてくれますか?

72
Blankman

移行のタイプについて話している場合、例えば文字列、整数、日時など、必要な場合 ActiveRecord :: ConnectionAdapters :: TableDefinitioncolumn メソッド。 (Rails 5の編集:接続も参照してください。 add_column 。)

このアップデートの時点で、標準タイプは次のとおりです。

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

:decimalの実装はデータベースごとに異なるため、可能であればそれを避けます。データベースでサポートされている限り、このリストにないタイプ(たとえば、MySQLの:polygon)を使用できますが、これはデータベースに依存しないため、避ける必要があります。

105
Mark Thomas

ソースでActiveRecordデータ型も確認できます。各DBMSアダプターには、独自のマッピングが含まれています。たとえば、MySQLの場合、このファイルを見てください: https://github.com/Rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148 または取得現在のDBMSアダプターの次のコード行:

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

データベースアダプタのタイプのデフォルトマッピングは次のとおりです。

enter image description hereenter image description here

5
gotqn

これはRails 2015年2月13日付けのソースコード(Rails 4.2)に基づいています。

使用しているデータベースにこれらのデータ型がどのようにマップされるかを確認したい場合。

Rails githubのソースコードで簡単に入手できます。

たとえば

Railsデータ型からmysql datatyesへのマッピング。

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 }
      }

https://github.com/Rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148 にあります

そして、誰かがここでpostgreSQLを望んでいるなら、あなたは行き​​ます。

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