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 і навіть більше в Rails 5.


1
Я вважаю, що це типи даних, які підтримуються у всіх базах даних. Однак, як згадує Пітер де Рідер, є такі типи даних, як hstore, які все ще підтримуються.
Альтаф Хамез

Питання: Схоже, що в документації на постгреси немає textтипу даних. І все-таки рейки все-таки можуть впоратися? Що відбувається на задньому плані?
ahnbizcad

PostgreSQL має текстовий тип даних. Під кришкою всі поля вархара / тексту - це масиви змінної довжини. postgresql.org/docs/9.3/interactive/datatype-character.html
makhan

Я хотів би додати, що якщо ви використовуєте базу даних, що не належить до postgres, і ваш додаток schema_format не встановлений для використання: sql, то ваш файл schema.rb не зможе скинути таблицю, яка використовує такі типи, як: json. Схема як і раніше буде скидатися для таблиць, які використовують типи за замовчуванням, але ви побачите коментар до таблиці зі спеціальними типами типу "не вдалося скинути таблицю ...". Подивіться тут, щоб встановити схему_формату .
bpercevic

Також ці стовпці матимуть тип nilу базі даних, що не належить до постгресів. Ви можете перевірити тип на консолі за допомогою Model.columns_hash["column_name"].type. Це лише речі, з якими я стикався при використанні: тип стовпця json, я можу помилятися, і це може трапитися не з усіма, але я подумав, що повідомляю майбутніх читачів у випадку виникнення проблем. Незважаючи на це, +1 за цю відповідь, тому що вона мені справді допомогла.
bpercevic

249

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

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

Існують також посилання, які використовуються для створення асоціацій. Але я не впевнений, що це фактичний тип даних .

У PostgreSQL доступні нові типи даних Rails 4:

Дізнайтеся більше про типи даних адреси тут і тут .

Також ось офіційний посібник з міграцій: http://edgeguides.rubyonrails.org/migrations.html


13
Оплески. +1 для ґрунтовності та очікування використання. Ось менталітет UX прямо там.
ahnbizcad

5
Абсолютно приголомшлива відповідь - за це велике спасибі. Посилання на статті про відмінності буквально вивели питання з моїх уст.
nlh

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, але він не повертається при створенні Active Record create (). Чи вирішено цю проблему з Rails 5?
Мартін Соммер

156

Важливо знати не тільки типи, але і відображення цих типів у типи баз даних:

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

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


Додано джерело - Agile Web Development with Rails 4


1
Мені буде цікаво побачити тип json у цій таблиці, якщо ви відчуваєте це
Freedom_Ben

2
Ви завжди можете перевірити необхідний NATIVE_DATABASE_TYPESадаптер - github.com/rails/rails/blob/master/activerecord/lib/…
gotqn

Чи є пляма на путівниках чи єдине джерело правди для цих речей з часом?
Гюго

81

Ви можете отримати доступ до цього списку будь-коли (навіть якщо у вас немає доступу до Інтернету) через:

rails generate model -h

5

Rails4 має деякі додані типи даних для Postgres.

Наприклад, у рейловому каналі № 400 названо два з них:

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

Крім того, ви також можете використовувати cidr, inet та macaddr. Для отримання додаткової інформації:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.