Rails 4: Danh sách các kiểu dữ liệu có sẵn


406

Tôi có thể tìm danh sách các loại dữ liệu có thể được sử dụng trong Ruby on Rails 4 ở đâu? Nhu la

  • text
  • string
  • integer
  • float
  • date

Tôi tiếp tục tìm hiểu về những cái mới và tôi muốn có một danh sách mà tôi có thể dễ dàng tham khảo.


1
Trang trùng lặp có thể có của các loại dữ liệu ActiveRecord ở đâu?
Đánh dấu Thomas

1
@MarkThomas: Không trùng lặp. Câu hỏi của tôi ở đây là dành riêng cho Rails 4.
Nicolas Raoul

Câu trả lời được chấp nhận trong câu hỏi đó về cơ bản giống như câu trả lời được chấp nhận của bạn. Cả hai đều trỏ đến tài liệu Rails 4. Ngoài ra, đó là một điểm cần thiết vì các kiểu dữ liệu ActiveRecord không thay đổi từ Rails 3 thành Rails 4.
Mark Thomas

10
Tôi đã không biết các kiểu dữ liệu AR không thay đổi giữa đường ray 3 và 4 vì vậy tôi rất biết ơn câu hỏi / câu trả lời này có ở đây.
Dty

Câu trả lời:


667

Dưới đây là tất cả các kiểu dữ liệu Rails 4 (ActiveRecord):

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

Nguồn: http://api.rubyonrails.org/groupes/ActiveRecord/ConnectionAd Chap / SchemaStatements.html # method-i-add_column
Đây là giống như với Rails 3 .

Nếu bạn sử dụng PostgreSQL, bạn cũng có thể tận dụng những điều sau:

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

Chúng được lưu trữ dưới dạng chuỗi nếu bạn chạy ứng dụng của mình với cơ sở dữ liệu không phải là PostgreQuery.

Chỉnh sửa, 2016-ngày 19 tháng 9:

rất nhiều kiểu dữ liệu cụ thể postgres trong Rails 4 và thậm chí nhiều hơn trong Rails 5.


1
Tôi tin rằng đây là những kiểu dữ liệu được hỗ trợ trên tất cả các cơ sở dữ liệu. Tuy nhiên, như Peter de Ridder đề cập, có một số kiểu dữ liệu như hstore vẫn được hỗ trợ.
Althaf Hameez

Câu hỏi: tài liệu postgres dường như không có textkiểu dữ liệu. Tuy nhiên, đường ray vẫn có thể xử lý nó? Những gì diễn ra trong nền?
ahnbizcad

PostgreSQL có một kiểu dữ liệu văn bản. Dưới mui xe, tất cả các trường varchar / text là các mảng có chiều dài thay đổi. postgresql.org/docs/9.3/interactive/datatype-character.html
makhan

Tôi muốn thêm rằng nếu bạn đang sử dụng cơ sở dữ liệu không phải là postgres và lược đồ ứng dụng của bạn không được đặt để sử dụng: sql, thì tệp lược đồ.rb của bạn sẽ không thể kết xuất bảng sử dụng các loại như: json. Lược đồ vẫn sẽ được kết xuất cho các bảng sử dụng các loại mặc định nhưng bạn sẽ thấy một nhận xét cho bảng với các loại đặc biệt như, "không thể đổ bảng ...". Nhìn vào đây để thiết lập giản đồ_format .
bpercevic

Ngoài ra, các cột đó sẽ có kiểu niltrong cơ sở dữ liệu không phải là postgres. Bạn có thể kiểm tra các loại trong giao diện điều khiển với Model.columns_hash["column_name"].type. Đây chỉ là những điều tôi gặp phải khi sử dụng: loại cột json, tôi có thể sai và điều này có thể không xảy ra với mọi người nhưng tôi nghĩ tôi sẽ cho độc giả tương lai biết trong trường hợp họ gặp rắc rối. Bất kể, +1 cho câu trả lời này vì nó thực sự giúp tôi.
bpercevic

249

Nhìn chung, bạn cũng có thể thấy hữu ích khi biết những loại dữ liệu này được sử dụng để làm gì:

Ngoài ra còn có các tài liệu tham khảo được sử dụng để tạo ra các hiệp hội. Nhưng, tôi không chắc đây là loại dữ liệu thực tế .

Các kiểu dữ liệu Rails 4 mới có sẵn trong PostgreSQL:

  • :hstore- lưu trữ các cặp khóa / giá trị trong một giá trị ( tìm hiểu thêm về loại dữ liệu mới này )
  • :array- sự sắp xếp các số hoặc chuỗi trong một hàng cụ thể ( tìm hiểu thêm về nó và xem các ví dụ )
  • :cidr_address - được sử dụng cho địa chỉ máy chủ IPv4 hoặc IPv6
  • :inet_address - được sử dụng cho các địa chỉ máy chủ IPv4 hoặc IPv6, giống như cidr_address nhưng nó cũng chấp nhận các giá trị với các bit khác không ở bên phải của netmask
  • :mac_address - được sử dụng cho các địa chỉ máy chủ MAC

Tìm hiểu thêm về các kiểu dữ liệu địa chỉ ở đâyở đây .

Ngoài ra, đây là hướng dẫn chính thức về di chuyển: http://edgeguides.rubyonrails.org/migations.html


13
Vỗ tay. +1 cho tính kỹ lưỡng và dự đoán về việc sử dụng. Đó là tâm lý UX ngay tại đó.
ahnbizcad

5
Câu trả lời hoàn toàn tuyệt vời - cảm ơn rất nhiều vì điều này. Các liên kết đến các bài viết về sự khác biệt theo nghĩa đen đã đưa các câu hỏi ra khỏi miệng tôi.
nlh

3
Đối với Postgres, ngoài ra còn có một uuidloại có thể được sử dụng như trường bình thường như t.uuid :name... hoặc khóa chính như create_table :users, id: :uuid do...hoặc ví dụt.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
TNT

1
Các loại PostgreQuery bổ sung được hỗ trợ bởi Rails được liệt kê trong tài liệu API choActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethods . Điểm nổi bật bao gồm money, json, xml,daterange
Eliot Sykes

1
Có, uuid đã được thêm cho Postgres, nhưng nó không được trả về với Active Record tạo (). Vấn đề đó đã được khắc phục với Rails 5 chưa?
Martin Sommer

156

Điều quan trọng là phải biết không chỉ các loại mà cả ánh xạ của các loại này vào các loại cơ sở dữ liệu:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Nguồn được thêm - Phát triển web Agile với Rails 4


1
Tôi sẽ thấy thú vị khi thấy loại json trong bảng này, nếu bạn cảm thấy như vậy
Freedom_Ben

2
Bạn luôn có thể kiểm tra NATIVE_DATABASE_TYPESbộ điều hợp bạn cần - github.com/rails/rails/blob/master/activerecord/lib/
mẹo

Có một vị trí trên các hướng dẫn hoặc một nguồn sự thật cho những điều này theo thời gian?
Hugo

81

Bạn có thể truy cập danh sách này mọi lúc bạn muốn (ngay cả khi bạn không có quyền truy cập Internet) thông qua:

rails generate model -h

5

Rails4 có một số kiểu dữ liệu được thêm vào cho Postgres.

Ví dụ, railscast # 400 đặt tên cho hai trong số chúng:

Rails 4 có hỗ trợ cho các kiểu dữ liệu riêng trong Postgres và chúng tôi sẽ hiển thị hai trong số này ở đây, mặc dù có rất nhiều hỗ trợ: mảng và hstore. Chúng ta có thể lưu trữ các mảng trong một cột kiểu chuỗi và chỉ định loại cho hstore.

Bên cạnh đó, bạn cũng có thể sử dụng cidr, inet và macaddr. Để biết thêm thông tin:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.