0Pricing
Ruby Academy · บทเรียน

พื้นฐาน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน Active Record
  2. การย้ายโครงสร้างฐานข้อมูล
  3. ความสัมพันธ์
  4. การตรวจสอบความถูกต้องและคำค้น
← กลับไปที่ Ruby Academy