Rails 4: รายการประเภทข้อมูลที่มีอยู่


406

ฉันจะหารายการประเภทข้อมูลที่สามารถใช้ใน Ruby on Rails ได้ที่ไหน เช่น

  • text
  • string
  • integer
  • float
  • date

ฉันเรียนรู้เกี่ยวกับสิ่งใหม่ ๆ อยู่เสมอและฉันชอบที่จะมีรายการที่ฉันสามารถอ้างอิงได้ง่าย



1
@MarkThomas: ไม่ซ้ำกัน คำถามของฉันที่นี่เฉพาะสำหรับ Rails 4
Nicolas Raoul

คำตอบที่ได้รับการยอมรับในคำถามนั้นก็เหมือนกับคำตอบที่คุณยอมรับ ทั้งคู่ชี้ไปที่ Rails 4 docs นอกจากนี้ยังเป็นจุดที่สงสัยเนื่องจากประเภทข้อมูล ActiveRecord ไม่เปลี่ยนจาก Rails 3 เป็น Rails 4
Mark Thomas

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
เหล่านี้เป็นเช่นเดียวกับทางรถไฟ 3

หากคุณใช้ PostgreSQL คุณสามารถใช้ประโยชน์จากสิ่งเหล่านี้ได้:

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

พวกเขาจะถูกเก็บไว้เป็นสตริงถ้าคุณเรียกใช้แอปของคุณด้วยฐานข้อมูลที่ไม่ใช่ PostgreSQL

แก้ไข 2016-Sep-19:

มีดาต้าสเปซที่เฉพาะเจาะจงเพิ่มมากขึ้นใน Rails 4 และอีกมากใน Rails 5


1
ฉันเชื่อว่าสิ่งเหล่านี้เป็นประเภทข้อมูลที่ได้รับการสนับสนุนในฐานข้อมูลทั้งหมด อย่างไรก็ตามในขณะที่ Peter de Ridder กล่าวถึงมีประเภทข้อมูลบางอย่างเช่น hstore ซึ่งยังคงได้รับการสนับสนุน
Althaf Hameez

คำถาม: เอกสารประกอบ postgres ดูเหมือนจะไม่มีtextชนิดข้อมูล แต่ทางรถไฟยังคงสามารถจัดการกับมันได้? เกิดอะไรขึ้นในพื้นหลัง
ahnbizcad

PostgreSQL มีประเภทข้อมูลข้อความ ภายใต้ประทุนฟิลด์ varchar / text ทั้งหมดเป็นอาร์เรย์ความยาวผันแปร postgresql.org/docs/9.3/interactive/datatype-character.html
makhan

ฉันต้องการเพิ่มว่าหากคุณใช้ฐานข้อมูลที่ไม่ใช่ postgres และแอปพลิเคชันของคุณ schema_format ไม่ได้ถูกตั้งค่าให้ใช้: sql แล้วไฟล์ schema.rb ของคุณจะไม่สามารถถ่ายโอนตารางที่ใช้ประเภทเช่น: json สคีมาจะยังคงถูกทิ้งสำหรับตารางที่ใช้ประเภทเริ่มต้น แต่คุณจะเห็นความคิดเห็นสำหรับตารางที่มีประเภทพิเศษเช่น "ไม่สามารถถ่ายโอนตาราง ... " ดูที่นี่เพื่อตั้ง schema_format
bpercevic

นอกจากนี้คอลัมน์เหล่านั้นจะมีประเภทnilในฐานข้อมูลที่ไม่ใช่ postgres Model.columns_hash["column_name"].typeคุณสามารถตรวจสอบประเภทในคอนโซลด้วย นี่เป็นเพียงสิ่งที่ฉันพบเมื่อใช้: ประเภทคอลัมน์ json ฉันอาจผิดและสิ่งนี้อาจไม่เกิดขึ้นกับทุกคน แต่ฉันคิดว่าฉันจะแจ้งให้ผู้อ่านในอนาคตทราบว่าพวกเขามีปัญหา ไม่ว่า +1 สำหรับคำตอบนี้เพราะช่วยฉันได้จริงๆ
bpercevic

249

คุณอาจพบว่ามีประโยชน์ที่จะทราบโดยทั่วไปว่ามีการใช้ข้อมูลประเภทใดใน:

นอกจากนี้ยังมีการอ้างอิงที่ใช้ในการสร้างการเชื่อมโยง แต่ผมไม่แน่ใจว่านี้เป็นชนิดข้อมูลที่เกิดขึ้นจริง

New Rails 4 datatypes พร้อมใช้งานใน PostgreSQL:

เรียนรู้เพิ่มเติมเกี่ยวกับประเภทข้อมูลที่อยู่ที่นี่และที่นี่

นี่คือคู่มืออย่างเป็นทางการสำหรับการย้ายถิ่น: 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 เพิ่มเติมการสนับสนุนจากทางรถไฟที่ระบุไว้ในเอกสาร API ActiveRecord::ConnectionAdapters::PostgreSQL::ColumnMethodsสำหรับ ไฮไลท์ ได้แก่money, json, xml,daterange
เอเลียต Sykes

1
ใช่มีการเพิ่ม uuid สำหรับ Postgres แต่จะไม่ถูกส่งกลับด้วย Active Record create () ปัญหานั้นได้รับการแก้ไขด้วย Rails 5 หรือไม่?
Martin Sommer

156

สิ่งสำคัญคือต้องรู้ไม่เพียง แต่ชนิด แต่การแมปประเภทเหล่านี้กับชนิดฐานข้อมูลด้วย:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


เพิ่มแหล่งที่มา - การพัฒนาเว็บ Agile ด้วย Rails 4


1
ฉันสนใจที่จะเห็นประเภท json ในตารางนี้ถ้าคุณรู้สึกถึงมัน
Freedom_Ben

2
คุณสามารถตรวจสอบNATIVE_DATABASE_TYPESอะแดปเตอร์ที่คุณต้องการได้เสมอ - github.com/rails/rails/blob/master/activerecord/lib/…
gotqn

มีจุดที่นำทางหรือแหล่งความจริงเดียวสำหรับสิ่งเหล่านี้เมื่อเวลาผ่านไป?
Hugo

81

คุณสามารถเข้าถึงรายการนี้ทุกครั้งที่คุณต้องการ (แม้ว่าคุณจะไม่มีการเข้าถึงอินเทอร์เน็ต) ผ่าน:

rails generate model -h

5

Rails4 มีประเภทข้อมูลเพิ่มเติมสำหรับ Postgres

ตัวอย่างเช่น railscast # 400 บอกชื่อสองข้อ:

Rails 4 รองรับการใช้งาน datatypes แบบดั้งเดิมใน Postgres และเราจะแสดงสองสิ่งนี้ที่นี่แม้ว่าจะรองรับได้มากขึ้น: array และ hstore เราสามารถจัดเก็บอาร์เรย์ในคอลัมน์ประเภทสตริงและระบุประเภทสำหรับ hstore

นอกจากนี้คุณยังสามารถใช้ cidr, inet และ macaddr สำหรับข้อมูลเพิ่มเติม:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.