2010-10-18 33 views

Trả lời

98

Nếu bạn đang nói về các loại di chuyển, ví dụ: chuỗi, số nguyên, ngày giờ, v.v., sau đó bạn muốn ActiveRecord::ConnectionAdapters::TableDefinition, phương thức column. (Rails 5 chỉnh sửa: xem thêm kết nối add_column..)

Tính đến bản cập nhật này, các loại tiêu chuẩn là:

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

Việc thực hiện :decimal là khác nhau với mỗi cơ sở dữ liệu, vì vậy tôi muốn tránh nó nếu có thể. Bạn có thể sử dụng loại không có trong danh sách này miễn là nó được cơ sở dữ liệu của bạn hỗ trợ (ví dụ: :polygon trong MySQL), nhưng điều này sẽ không phải là cơ sở dữ liệu bất khả tri và cũng nên tránh.

+0

Chỉ là vấn đề lựa chọn hoặc bất kỳ lý do cụ thể nào để thích ApiDock trên tài liệu chính thức? – Swanand

+0

@Swanand Đó là nội dung giống nhau, tất nhiên, nhưng điều hướng thì tốt hơn. Và khả năng xem có bao nhiêu thứ đã thay đổi trong các phiên bản Rails khác nhau là vô giá. –

+0

@Swanand Các ghi chú do người dùng tạo cũng rất hữu ích ở những khu vực mà tài liệu một mình không hữu ích lắm. – Ajedi32

6

Bạn cũng có thể xem loại dữ liệu ActiveRecord trong nguồn. Mỗi bộ điều hợp DBMS chứa bản đồ riêng của nó. Ví dụ, trong trường hợp MySQL nhìn vào tập tin này: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148 hoặc nhận được nó bằng dòng mã này cho adapter DBMS hiện tại:

ActiveRecord::Base.connection.native_database_types.keys 
4

Đây là ánh xạ mặc định các loại cho adapter cơ sở dữ liệu:

enter image description here enter image description here

4

chú giải này được dựa trên Rails Source Code ngày 13 Tháng 2 năm 2015 (Rails 4,2)

Trong trường hợp ai đó muốn xem cách các kiểu dữ liệu này được ánh xạ vào cơ sở dữ liệu bạn đang sử dụng.

Bạn có thể dễ dàng lấy mã nguồn của đường ray tại github.

Ví dụ

Rails kiểu dữ liệu để lập bản đồ mysql datatyes.

NATIVE_DATABASE_TYPES = { 
     :primary_key => "int(11) auto_increment PRIMARY KEY", 
     :string  => { :name => "varchar", :limit => 255 }, 
     :text  => { :name => "text" }, 
     :integer  => { :name => "int", :limit => 4 }, 
     :float  => { :name => "float" }, 
     :decimal  => { :name => "decimal" }, 
     :datetime => { :name => "datetime" }, 
     :time  => { :name => "time" }, 
     :date  => { :name => "date" }, 
     :binary  => { :name => "blob" }, 
     :boolean  => { :name => "tinyint", :limit => 1 } 
     } 

Tìm thấy tại https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb#L148

Và nếu một số ai muốn PostgreSQL here you go.

NATIVE_DATABASE_TYPES = { 
     primary_key: "serial primary key", 
     bigserial: "bigserial", 
     string:  { name: "character varying" }, 
     text:  { name: "text" }, 
     integer:  { name: "integer" }, 
     float:  { name: "float" }, 
     decimal:  { name: "decimal" }, 
     datetime: { name: "timestamp" }, 
     time:  { name: "time" }, 
     date:  { name: "date" }, 
     daterange: { name: "daterange" }, 
     numrange: { name: "numrange" }, 
     tsrange:  { name: "tsrange" }, 
     tstzrange: { name: "tstzrange" }, 
     int4range: { name: "int4range" }, 
     int8range: { name: "int8range" }, 
     binary:  { name: "bytea" }, 
     boolean:  { name: "boolean" }, 
     bigint:  { name: "bigint" }, 
     xml:   { name: "xml" }, 
     tsvector: { name: "tsvector" }, 
     hstore:  { name: "hstore" }, 
     inet:  { name: "inet" }, 
     cidr:  { name: "cidr" }, 
     macaddr:  { name: "macaddr" }, 
     uuid:  { name: "uuid" }, 
     json:  { name: "json" }, 
     jsonb:  { name: "jsonb" }, 
     ltree:  { name: "ltree" }, 
     citext:  { name: "citext" }, 
     point:  { name: "point" }, 
     bit:   { name: "bit" }, 
     bit_varying: { name: "bit varying" }, 
     money:  { name: "money" }, 
     } 
Các vấn đề liên quan