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ść.

Nicolas Raoul
źródło
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.

Nicolas Raoul
źródło
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

lflores
źródło
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,
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
tomascharad
źródło
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

Peter de Ridder
źródło