พื้นฐาน Active Record
พื้นฐาน ORM
พื้นฐาน Active Record เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
Active Record คืออะไร
Active Record คือชั้นสำหรับเชื่อมวัตถุกับฐานข้อมูลเชิงสัมพันธ์ของเฟรมเวิร์ก Rails ช่วยเชื่อมวัตถุ Ruby เข้ากับแถวในตารางฐานข้อมูล ทำให้คุณทำงานกับวัตถุแทนการเขียนคำสั่งเอสคิวแอลดิบ
- คลาส จะแทน ตาราง
- อินสแตนซ์ จะแทน แถว
- แอตทริบิวต์ จะแทน คอลัมน์
การกำหนดโมเดล
โมเดลคือคลาสที่สืบทอดจาก ApplicationRecord ซึ่งสืบทอดจาก ActiveRecord::Base ตามธรรมเนียม โมเดล User จะเชื่อมกับตาราง users โดยอัตโนมัติ
class User < ApplicationRecord
end
# Maps to the 'users' table
# Columns become attributes automaticallyใช้ธรรมเนียมแทนการตั้งค่า
Active Record ใช้ธรรมเนียมการตั้งชื่อ จึงช่วยลดการตั้งค่าที่คุณต้องเขียน:
- ชื่อคลาสเป็นเอกพจน์และใช้รูปแบบ CamelCase:
User - ชื่อตารางเป็นพหูพจน์และใช้รูปแบบตัวพิมพ์เล็กคั่นด้วยขีดล่าง:
users - คีย์หลักเริ่มต้นคือ
id
ทำตามธรรมเนียม แล้วการเชื่อมโยงส่วนใหญ่จะทำงานโดยอัตโนมัติ
การสร้างระเบียน
สร้างแถวด้วย create หรือสร้างวัตถุก่อนแล้วจึงใช้ save create จะสร้างอินสแตนซ์และบันทึกข้อมูลภายในการเรียกใช้ครั้งเดียว
user = User.create(name: "Ada", email: "ada@example.com")
# Or in two steps:
other = User.new(name: "Linus")
other.email = "linus@example.com"
other.saveการอ่านระเบียน
ดึงระเบียนด้วยคำสั่งค้นหา:
User.find(1)ค้นหาด้วยคีย์หลัก และจะแจ้งข้อผิดพลาดหากไม่พบUser.find_by(email: 'a@b.com')ค้นหาด้วยคอลัมน์ใดก็ได้ และคืนค่า nil หากไม่พบUser.allสำหรับทุกแถวUser.firstและUser.last
user = User.find(1)
admin = User.find_by(role: "admin")
everyone = User.allการปรับปรุงระเบียน
เปลี่ยนแอตทริบิวต์แล้วใช้ save หรือใช้ update เพื่อกำหนดค่าและบันทึกพร้อมกัน update จะคืนค่า true หรือ false ตามผลการตรวจสอบความถูกต้อง
user = User.find(1)
user.update(name: "Ada Lovelace")
# Equivalent two-step form:
user.name = "Ada Lovelace"
user.saveการลบระเบียน
ลบแถวด้วย destroy ซึ่งจะเรียกใช้การเรียกกลับและความสัมพันธ์ หรือใช้ delete ซึ่งส่งคำสั่งเอสคิวแอลโดยตรงและข้ามการเรียกกลับ ควรใช้ destroy เว้นแต่คุณมีเหตุผลที่จะข้ามการเรียกกลับ
user = User.find(1)
user.destroy
# Bulk destroy:
User.where(active: false).destroy_allแอตทริบิวต์และการติดตามการเปลี่ยนแปลง
Active Record จะติดตามการเปลี่ยนแปลงที่ยังไม่ได้บันทึก คำสั่งอย่าง changed? changes และ name_was จะบอกว่ามีข้อมูลใดเปลี่ยนแปลงก่อนที่คุณจะบันทึก สิ่งนี้มีประโยชน์ในฟังก์ชันเรียกกลับและการบันทึกข้อมูลการทำงาน
user = User.find(1)
user.name = "New Name"
puts user.changed? # true
puts user.name_was # old value
puts user.changes.inspectไฟล์ schema.rb
Active Record อ่านโครงสร้างตารางจากฐานข้อมูล ไม่ได้อ่านจากโมเดลของคุณ โครงสร้างปัจจุบันจะถูกจำลองไว้ใน db/schema.rb ซึ่งสร้างขึ้นจากไมเกรชัน โดยทั่วไปคุณแทบไม่ต้องแก้ไขไฟล์นี้ด้วยตนเอง
คำสั่งเอสคิวแอลอยู่ที่ใด
Active Record จะแปลงการเรียกคำสั่งของคุณเป็นคำสั่งเอสคิวแอลเบื้องหลัง User.find(1) จะกลายเป็น SELECT * FROM users WHERE id = 1 LIMIT 1 คุณสามารถดูคำสั่งเอสคิวแอลที่สร้างขึ้นด้วย User.where(active: true).to_sql
sql = User.where(active: true).to_sql
# => SELECT "users".* FROM "users" WHERE "users"."active" = TRUEเหตุใดชั้นเชื่อมโยงวัตถุจึงมีประโยชน์
Active Record มอบสิ่งต่อไปนี้ให้คุณ:
- โค้ดที่ไม่ผูกกับฐานข้อมูลใดโดยเฉพาะ (PostgreSQL, MySQL, ฐานข้อมูลเอสคิวไลต์)
- การป้องกันการแทรกคำสั่งเอสคิวแอลด้วยคำสั่งสืบค้นแบบใช้พารามิเตอร์
- การเข้าถึงข้อมูลที่อ่านง่ายและเป็นเชิงวัตถุ
คุณจะใช้คำสั่งเอสคิวแอลดิบเฉพาะกรณีพิเศษเท่านั้น
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับพื้นฐาน Active Record
ทบทวน: พื้นฐาน Active Record
คุณได้เรียนรู้พื้นฐานของชั้นเชื่อมโยงวัตถุกับฐานข้อมูลแล้ว:
- คลาสจะแทนตาราง และอินสแตนซ์จะแทนแถว
- การใช้ธรรมเนียมแทนการตั้งค่าช่วยจัดการการตั้งชื่อ
- การสร้าง อ่าน แก้ไข และลบ:
create,find/find_by,update,destroy - การติดตามการเปลี่ยนแปลงจะแสดงข้อมูลที่ยังไม่ได้บันทึก
- Active Record สร้างคำสั่งเอสคิวแอลที่ปลอดภัยให้คุณ
ถัดไป เราจะจัดการโครงสร้างฐานข้อมูลด้วยไมเกรชัน
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน Active Record” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน Active Record” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน Active Record”
พื้นฐาน ORM คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน Active Record” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Active Record
- การย้ายโครงสร้างฐานข้อมูล
- ความสัมพันธ์
- การตรวจสอบความถูกต้องและคำค้น