Ruby on Rails - Active Records

Rails Active Record คือเลเยอร์ Object / Relational Mapping (ORM) ที่มาพร้อมกับ Rails เป็นไปตามรูปแบบ ORM มาตรฐานอย่างใกล้ชิดซึ่งมีดังต่อไปนี้ -

  • ตารางแมปกับชั้นเรียน
  • แถวแมปกับวัตถุและ
  • คอลัมน์แมปกับแอตทริบิวต์ของออบเจ็กต์

Rails Active Records จัดเตรียมอินเทอร์เฟซและการเชื่อมโยงระหว่างตารางในฐานข้อมูลเชิงสัมพันธ์กับโค้ดโปรแกรม Ruby ที่จัดการเร็กคอร์ดฐานข้อมูล ชื่อเมธอด Ruby ถูกสร้างขึ้นโดยอัตโนมัติจากชื่อฟิลด์ของตารางฐานข้อมูล

วัตถุ Active Record แต่ละรายการมี CRUD (Create, Rกิน, Update และ Delete) วิธีการเข้าถึงฐานข้อมูล กลยุทธ์นี้ช่วยให้การออกแบบที่เรียบง่ายและการแมปแบบตรงไปตรงมาระหว่างตารางฐานข้อมูลและวัตถุแอปพลิเคชัน

การแปลโมเดลโดเมนเป็น SQL

โดยทั่วไปแล้วการแปลโมเดลโดเมนเป็น SQL จะตรงไปตรงมาตราบใดที่คุณจำได้ว่าคุณต้องเขียน Rails-friendly SQL ในทางปฏิบัติคุณต้องปฏิบัติตามกฎบางประการ -

  • แต่ละเอนทิตี (เช่นหนังสือ) ได้รับตารางในฐานข้อมูลที่ตั้งชื่อตาม แต่อยู่ในพหูพจน์ (หนังสือ)

  • แต่ละตารางการจับคู่เอนทิตีดังกล่าวมีเขตข้อมูลที่เรียกว่าidซึ่งมีจำนวนเต็มเฉพาะสำหรับแต่ละระเบียนแทรกลงในตาราง

  • ระบุเอนทิตี x และเอนทิตี y หากเอนทิตี y เป็นของเอนทิตี x ตาราง y มีฟิลด์ที่เรียกว่า x_id

  • ฟิลด์จำนวนมากในตารางใด ๆ จะเก็บค่าสำหรับคุณสมบัติอย่างง่ายของเอนทิตีนั้น (อะไรก็ได้ที่เป็นตัวเลขหรือสตริง)

การสร้างไฟล์ Active Record (รุ่น)

ในการสร้างไฟล์ Active Record สำหรับเอนทิตีของเราสำหรับแอปพลิเคชันไลบรารีที่แนะนำในบทก่อนหน้าให้ใช้คำสั่งต่อไปนี้จากระดับบนสุดของไดเร็กทอรีแอ็พพลิเคชัน

library\> rails script/generate model Book
library\> rails script/generate model Subject

ข้างบน rails generate model book คำสั่งสร้างรหัสอัตโนมัติดังต่อไปนี้ -

คุณกำลังบอกให้เครื่องกำเนิดไฟฟ้าสร้างแบบจำลองที่เรียกว่าหนังสือและหัวเรื่องเพื่อจัดเก็บอินสแตนซ์ของหนังสือและหัวเรื่อง สังเกตว่าคุณใช้ Book และ Subject เป็นตัวพิมพ์ใหญ่และใช้รูปแบบเอกพจน์ นี่คือกระบวนทัศน์ของ Rails ที่คุณควรทำตามทุกครั้งที่สร้างโมเดล

เมื่อคุณใช้เครื่องมือสร้าง Rails จะสร้างไฟล์โมเดลจริงที่เก็บวิธีการทั้งหมดที่ไม่ซ้ำกับโมเดลและกฎทางธุรกิจที่คุณกำหนดไฟล์ทดสอบหน่วยสำหรับการดำเนินการพัฒนาที่ขับเคลื่อนด้วยการทดสอบไฟล์ข้อมูลตัวอย่าง (เรียกว่าส่วนควบ) เพื่อใช้ ด้วยการทดสอบหน่วยและการโอนย้าย Rails ที่ทำให้การสร้างตารางและคอลัมน์ฐานข้อมูลเป็นเรื่องง่าย

นอกเหนือจากการสร้างไฟล์และไดเรกทอรีอื่น ๆ อีกมากมายสิ่งนี้จะสร้างไฟล์ที่ชื่อ book.rb และ subject.rb มีนิยามโครงกระดูกในไฟล์ app/models ไดเรกทอรี

เนื้อหาที่มีอยู่ใน book.rb -

class Book < ActiveRecord::Base
end

เนื้อหาที่มีอยู่ใน subject.rb -

class Subject < ActiveRecord::Base
end

การสร้างความสัมพันธ์ระหว่างโมเดล

เมื่อคุณมีมากกว่าหนึ่งรุ่นในแอปพลิเคชันรางคุณจะต้องสร้างการเชื่อมต่อระหว่างโมเดลเหล่านั้น คุณสามารถทำได้ผ่านการเชื่อมโยง Active Record รองรับการเชื่อมโยงสามประเภท -

  • one-to-one- ความสัมพันธ์แบบหนึ่งต่อกลุ่มเกิดขึ้นเมื่อรายการหนึ่งมีรายการอื่น ตัวอย่างเช่นคน ๆ หนึ่งมีวันเกิดครบหนึ่งปีหรือสุนัขมีเจ้าของคนเดียว

  • one-to-many- ความสัมพันธ์แบบหนึ่งต่อกลุ่มเกิดขึ้นเมื่อวัตถุชิ้นเดียวสามารถเป็นสมาชิกของวัตถุอื่น ๆ ได้ ตัวอย่างเช่นเรื่องหนึ่งสามารถมีหนังสือได้หลายเล่ม

  • many-to-many - ความสัมพันธ์แบบกลุ่มต่อกลุ่มเกิดขึ้นเมื่อออบเจ็กต์แรกเกี่ยวข้องกับอ็อบเจ็กต์ที่สองอย่างน้อยหนึ่งอ็อบเจกต์และอ็อบเจ็กต์ที่สองเกี่ยวข้องกับอ็อบเจ็กต์แรกหนึ่งตัวหรือหลายตัว

คุณระบุการเชื่อมโยงเหล่านี้โดยเพิ่มการประกาศให้กับโมเดลของคุณ: has_one, has_many, belong_to และ has_and_belongs_to_many

ตอนนี้คุณต้องบอก Rails ว่าคุณต้องการสร้างความสัมพันธ์ใดภายในระบบข้อมูลห้องสมุด โดยแก้ไข book.rb และ subject.rb ให้มีลักษณะดังนี้ -

class Book < ActiveRecord::Base
   belongs_to :subject
end

เราได้ใช้หัวเรื่องเอกพจน์ในตัวอย่างข้างต้นเนื่องจากหนังสือหนึ่งเล่มสามารถเป็นของหัวเรื่องเดียวได้

class Subject < ActiveRecord::Base
   has_many :books
end

เราใช้หนังสือพหูพจน์ที่นี่เพราะเรื่องหนึ่งสามารถมีได้หลายเล่ม

การใช้การตรวจสอบความถูกต้องกับแบบจำลอง

การดำเนินการตรวจสอบความถูกต้องทำได้ในแบบจำลอง Rails ข้อมูลที่คุณกำลังป้อนลงในฐานข้อมูลถูกกำหนดไว้ในโมเดล Rails จริงดังนั้นจึงเป็นเรื่องที่สมเหตุสมผลที่จะกำหนดว่าข้อมูลที่ถูกต้องใดที่อยู่ในตำแหน่งเดียวกัน

การตรวจสอบคือ -

  • ค่าของฟิลด์หัวเรื่องไม่ควรเป็น NULL
  • ฟิลด์มูลค่าราคาควรเป็นตัวเลข

เปิด book.rb ใน app\model subdiractory และทำการตรวจสอบความถูกต้องต่อไปนี้ -

class Book < ActiveRecord::Base
   belongs_to :subject
   validates_presence_of :title
   validates_numericality_of :price, :message=>"Error Message"
end
  • validates_presence_of - ปกป้องฟิลด์ "NOT NULL" จากการป้อนข้อมูลของผู้ใช้ที่ขาดหายไป

  • validates_numericality_of - ป้องกันผู้ใช้ป้อนข้อมูลที่ไม่ใช่ตัวเลข

นอกจากการตรวจสอบความถูกต้องที่กล่าวมาแล้วยังมีการตรวจสอบความถูกต้องทั่วไปอื่น ๆ ตรวจสอบRails คู่มือด่วน

Next คืออะไร?

ในบทถัดไปเราจะเรียนรู้ Rails Migration ซึ่งช่วยให้คุณสามารถใช้ Ruby เพื่อกำหนดการเปลี่ยนแปลงสคีมาฐานข้อมูลของคุณทำให้สามารถใช้ระบบควบคุมเวอร์ชันเพื่อให้ข้อมูลตรงกับรหัสจริง