Rails 4: список доступных типов данных

406

Где я могу найти список типов данных, которые можно использовать в Ruby on Rails 4? Такие как

  • text
  • string
  • integer
  • float
  • date

Я продолжаю узнавать о новых, и я хотел бы иметь список, к которому я мог бы легко сослаться.

Николас Рауль
источник
1
@MarkThomas: не дубликат. Мой вопрос здесь специально для Rails 4.
Nicolas Raoul
Принятый ответ на этот вопрос по сути такой же, как ваш принятый ответ. Оба указывают на Rails 4 документа. Кроме того, это спорный вопрос, потому что типы данных ActiveRecord не изменились с Rails 3 на Rails 4.
Марк Томас
10
Я, например, не знал, что типы данных AR не менялись между рельсами 3 и 4, поэтому я благодарен, что этот вопрос / ответ здесь.
DTY

Ответы:

667

Вот все типы данных Rails 4 (миграция ActiveRecord):

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

Источник: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
Они такие же, как в Rails 3 .

Если вы используете PostgreSQL, вы также можете воспользоваться этим:

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

Они хранятся в виде строк, если вы запускаете свое приложение с базой данных не-PostgreSQL.

Изменить, 2016-сентябрь-19:

Там в Rails 4 есть намного больше специфических типов данных postgres и даже больше в Rails 5.

Николас Рауль
источник
1
Я считаю, что это типы данных, которые поддерживаются во всех базах данных. Однако, как упоминает Питер де Риддер, есть некоторые типы данных, такие как hstore, которые все еще поддерживаются.
Альтаф Хамиз
Вопрос: похоже, что в документации postgres нет textтипа данных. Тем не менее, рельсы все еще могут справиться с этим? Что происходит в фоновом режиме?
ahnbizcad
PostgreSQL имеет текстовый тип данных. Под капотом все поля varchar / text являются массивами переменной длины. postgresql.org/docs/9.3/interactive/datatype-character.html
махан
Я хотел бы добавить, что если вы используете базу данных, отличную от postgres, и ваше schema_format приложения не настроено на использование: sql, то ваш файл schema.rb не сможет вывести таблицу, в которой используются такие типы, как: json. Схема будет по-прежнему сохраняться для таблиц, которые используют типы по умолчанию, но вы увидите комментарий к таблице со специальными типами, такими как «не удалось создать таблицу ...». Посмотрите здесь, чтобы установить schema_format .
bpercevic
Кроме того, эти столбцы будут иметь тип nilв не-postgres базе данных. Вы можете проверить тип в консоли с помощью Model.columns_hash["column_name"].type. Это просто то, с чем я столкнулся при использовании: тип столбца json, я могу ошибаться, и это может случиться не со всеми, но я подумал, что буду знать будущим читателям, если у них возникнут проблемы. Несмотря на это, +1 за этот ответ, потому что он действительно помог мне.
bpercevic
249

Вам также может быть полезно узнать, в целом, для чего используются эти типы данных:

  • :string- для небольших типов данных, таких как заголовок. ( Вы должны выбрать строку или текст? )
  • :text - для более длинных частей текстовых данных, таких как параграф информации
  • :binary - для хранения данных, таких как изображения, аудио или фильмы.
  • :boolean - для хранения истинных или ложных значений.
  • :date - хранить только дату
  • :datetime - сохранить дату и время в столбце.
  • :time - только на время
  • :timestamp- для сохранения даты и времени в столбце. (В чем разница между датой и временем ? )
  • :decimal- для десятичных дробей ( пример использования десятичных дробей ).
  • :float- для десятичных. ( Какая разница между десятичной и плавающей? )
  • :integer - для целых чисел.
  • :primary_key - уникальный ключ, который может однозначно идентифицировать каждую строку в таблице

Там также ссылки, используемые для создания ассоциаций. Но я не уверен, что это фактический тип данных .

Новые типы данных Rails 4, доступные в PostgreSQL:

  • :hstore- хранение пар ключ / значение в одном значении ( узнайте больше об этом новом типе данных )
  • :array- расположение чисел или строк в определенной строке ( узнайте больше об этом и посмотрите примеры )
  • :cidr_address - используется для адресов хоста IPv4 или IPv6
  • :inet_address - используется для адресов хоста IPv4 или IPv6, так же, как cidr_address, но также принимает значения с ненулевыми битами справа от маски сети
  • :mac_address - используется для MAC-адресов хоста

Узнайте больше об адресных типах данных здесь и здесь .

Кроме того, вот официальное руководство по миграции: http://edgeguides.rubyonrails.org/migrations.html

lflores
источник
13
Аплодисменты. +1 за тщательность и ожидание использования. Это менталитет UX прямо здесь.
ahnbizcad
5
Абсолютно потрясающий ответ - большое спасибо за это. Ссылки на статьи о разногласиях буквально забрали вопросы из моих уст.
14:00
3
Для Postgres есть также uuidтип, который можно использовать как обычное поле, например, t.uuid :name... или как первичный ключ, например create_table :users, id: :uuid do...илиt.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
TNT
1
Дополнительные типы PostgreSQL, поддерживаемые Rails, перечислены в документации API дляActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods . Основные моменты включают money, json, xml,daterange
Элиот Sykes
1
Да, uuid был добавлен для Postgres, но он не возвращается с активной записью create (). Была ли эта проблема исправлена ​​в Rails 5?
Мартин Соммер
156

Важно знать не только типы, но и сопоставление этих типов с типами базы данных:

введите описание изображения здесь

введите описание изображения здесь


Добавлен источник - Agile Web Development с Rails 4

gotqn
источник
1
Мне было бы интересно увидеть тип json в этой таблице, если вы не против
Freedom_Ben
2
Вы всегда можете проверить NATIVE_DATABASE_TYPESдля адаптера вам нужно - github.com/rails/rails/blob/master/activerecord/lib/...
gotqn
Есть ли место в путеводителях или единый источник правды для этих вещей со временем?
Хьюго
81

Вы можете получить доступ к этому списку в любое время (даже если у вас нет доступа к Интернету) через:

rails generate model -h
tomascharad
источник
5

В Rails4 есть несколько добавленных типов данных для Postgres.

Например, Railscast # 400 называет два из них:

В Rails 4 есть поддержка собственных типов данных в Postgres, и мы покажем два из них здесь, хотя поддерживается гораздо больше: массив и hstore. Мы можем хранить массивы в столбце строкового типа и указывать тип для hstore.

Кроме того, вы также можете использовать cidr, inet и macaddr. За дополнительной информацией:

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

Питер де Риддер
источник