Szyny 4: Lista dostępnych typów danych


406

Gdzie mogę znaleźć listę typów danych, których można użyć w Ruby on Rails 4? Jak na przykład

  • text
  • string
  • integer
  • float
  • date

Ciągle uczę się o nowych i chciałbym mieć listę, do której mógłbym łatwo się odnieść.



1
@MarkThomas: Nie duplikat. Moje pytanie dotyczy konkretnie Rails 4.
Nicolas Raoul,

Przyjęta odpowiedź w tym pytaniu jest zasadniczo taka sama, jak zaakceptowana odpowiedź. Oba wskazują dokumenty Rails 4. Jest to również kwestia sporna, ponieważ typy danych ActiveRecord nie zmieniły się z Rails 3 na Rails 4.
Mark Thomas

10
Dla jednego nie wiedziałem, że typy danych AR nie zmieniły się między szynami 3 i 4, więc jestem wdzięczny za to pytanie / odpowiedź.
Dty

Odpowiedzi:


667

Oto wszystkie typy danych Rails 4 (migracja ActiveRecord):

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

Źródło: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_column
Są takie same jak w przypadku Rails 3 .

Jeśli korzystasz z PostgreSQL, możesz również skorzystać z tych:

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

Są one przechowywane jako ciągi, jeśli uruchomisz aplikację z bazą danych inną niż PostgreSQL.

Edycja, 2016-wrz-19:

Jest o wiele więcej Rails 4 specyficznych typów danych postgres, a nawet więcej w Rails 5.


1
Uważam, że są to typy danych obsługiwane we wszystkich bazach danych. Jednak, jak wspomina Peter de Ridder, istnieją pewne typy danych, takie jak hstore, które są nadal obsługiwane.
Althaf Hameez

Pytanie: wydaje się, że dokumentacja postgres nie ma texttypu danych. A jednak szyny nadal mogą to obsłużyć? Co dzieje się w tle?
ahnbizcad

PostgreSQL ma typ danych tekstowych. Pod maską wszystkie pola varchar / text są tablicami o zmiennej długości. postgresql.org/docs/9.3/interactive/datatype-character.html
makhan

Chciałbym dodać, że jeśli korzystasz z bazy danych innej niż postgres, a aplikacja schema_format nie jest ustawiona na użycie: sql, to plik schema.rb nie będzie w stanie zrzucić tabeli używającej typów takich jak: json. Schemat będzie nadal zrzucany dla tabel, które używają typów domyślnych, ale zobaczysz komentarz do tabeli ze specjalnymi typami, takimi jak „nie można zrzucić tabeli ...”. Zajrzyj tutaj, aby ustawić schema_format .
bpercevic

Ponadto kolumny te będą zawierały niltekst w bazie danych innej niż postgres. Możesz sprawdzić typ w konsoli za pomocą Model.columns_hash["column_name"].type. To tylko rzeczy, na które natknąłem się podczas używania: typ kolumny json, mogę się mylić i może to nie zdarzyć się wszystkim, ale pomyślałem, że dam przyszłym czytelnikom informacje na wypadek problemów. Niezależnie od tego +1 za tę odpowiedź, ponieważ naprawdę mi pomogła.
bpercevic

249

Przydatna może być również ogólna wiedza o tym, do czego służą te typy danych:

Istnieją również odniesienia używane do tworzenia powiązań. Ale nie jestem pewien, czy jest to rzeczywisty typ danych .

Nowe typy danych Rails 4 dostępne w PostgreSQL:

  • :hstore- przechowywanie par klucz / wartość w obrębie jednej wartości ( dowiedz się więcej o tym nowym typie danych )
  • :array- układ liczb lub ciągów w określonym rzędzie ( dowiedz się więcej na ten temat i zobacz przykłady )
  • :cidr_address - używany dla adresów hostów IPv4 lub IPv6
  • :inet_address - używany dla adresów hostów IPv4 lub IPv6, taki sam jak adres_cidr, ale akceptuje również wartości z niezerowymi bitami po prawej stronie maski sieci
  • :mac_address - używany dla adresów hostów MAC

Dowiedz się więcej o typach danych adresów tutaj i tutaj .

Oto oficjalny przewodnik na temat migracji: http://edgeguides.rubyonrails.org/migrations.html


13
Oklaski. +1 za dokładność i przewidywanie użycia. To właśnie mentalność UX.
ahnbizcad

5
Absolutnie wspaniała odpowiedź - wielkie dzięki za to. Linki do artykułów na temat różnic dosłownie wyszły z moich pytań.
nlh

3
Dla Postgres istnieje dodatkowo uuidtyp, który może być użyty jako zwykłe pole jak t.uuid :name... lub jako klucz podstawowy jak create_table :users, id: :uuid do...lub npt.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
TNT

1
Dodatkowe typy PostgreSQL obsługiwane przez Railsy wymienione w dokumentacji API dlaActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods . Najważniejsze to money, json, xml,daterange
Eliot Sykes

1
Tak, uuid został dodany dla Postgres, ale nie jest zwracany z Active Record create (). Czy ten problem został rozwiązany w Rails 5?
Martin Sommer,

156

Ważne jest, aby znać nie tylko typy, ale także mapowanie tych typów na typy baz danych:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


Dodano źródło - Agile Web Development with Rails 4


1
Byłbym zainteresowany, aby zobaczyć typ json w tej tabeli, jeśli masz ochotę
Freedom_Ben

2
Zawsze możesz sprawdzić, NATIVE_DATABASE_TYPESczy potrzebujesz adaptera - github.com/rails/rails/blob/master/activerecord/lib/…
gotqn

Czy z czasem jest jakieś miejsce na przewodnikach lub jedno źródło prawdy?
Hugo,

81

Możesz uzyskać dostęp do tej listy w dowolnym momencie (nawet jeśli nie masz dostępu do Internetu) poprzez:

rails generate model -h

5

Rails4 ma dodane typy danych dla Postgres.

Na przykład railscast # 400 wymienia dwa z nich:

Railsy 4 obsługują rodzime typy danych w Postgresie, a my pokażemy tutaj dwa z nich, chociaż obsługiwanych jest znacznie więcej: tablica i hstore. Możemy przechowywać tablice w kolumnie typu ciąg i określić typ dla hstore.

Poza tym możesz także używać cidr, inet i macaddr. Po więcej informacji:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.