การใช้ชื่อใน ActiveRecord
ActiveRecord เป็น Library ตัวหนึ่งที่อยู่ใน Ruby on Rails ที่ถือว่าเป็น library ที่เปลี่ยนโลกของการเข้าถึง database ลักษณะของมันก็คือจับคู่ระหว่าง Object กับ ข้อมูลหรือที่เป็นภาษาอังกฤษว่า ORM วันนี้จะมาลองดูเรื่องเบื้องต้นของ ActiveRecord Model กันว่า มันจะเป็นอย่างไร
1. ถึงไม่ใช้ ActiveRecord Migration ก็สามารถใช้ ActiveRecord ได้
หลักการของ ActiveRecord คือการ map ชื่อของ Class / property ต่างๆ ไปยัง database ถ้าเราใช้ convention ที่ถูกต้อง ก็สามารถเข้าถึง database ได้
อย่างไรก็ตาม ถ้าการต้องมาเขียนแล้ว map ชื่อตามกันนั้นยากเกินไป ActiveRecord Migration ก็เป็นผู้ช่วยที่ดี และมีประโยชน์มาก โดยเฉพาะตอนปรับปรุงโมเดล
2. ชื่อของ Class สำหรับ ActiveRecord
ชื่อของ Class ที่จะใช้เป็น ActiveRecord Model นั้น จะเป็นเอกพจน์เสมอ
แต่ในการเชื่อมไปยังฐานข้อมูล ชื่อของ Table หรือ Schema ที่ใช้นั้นจะเป็นพหูพจน์ของชื่อ Class เช่นเดียวกัน เช่น
- Article -> articles
- Deer -> deers
- Person -> people
เน้นว่าจากโมเดลที่เป็นเอกพจน์ ก็จะกลายเป็น พหูพจน์จริงๆจังๆ ไม่ใช่แค่ เติม s แต่ถ้าชื่อไหนมันเปลี่ยนรูปด้วย ก็ต้องเปลี่ยนรูป
นอกจากนี้ถ้าสังเกตจะเห็นว่า ตัวพิมพ์ใหญ่ถูกเปลี่ยนไปเป็นตัวพิมพ์เล็กเช่นเดียวกัน นั่นเป็นอีกเรื่องหนึ่ง ในการแปลง convention กล่าวคือ
ต้องเปลี่ยนจาก CamelCases ให้เป็น snake_cases เช่น
- LineItem -> line_item
- UserDatum -> user_data
3. ชื่อของ Class ที่มี Namespace
ในกรณีนี้เช่น เราจะมี model ที่ชื่อว่า API::User หรือ API::Profile และ อีกตัวคือ Session ซึ่งไม่ได้มี Namespace ซึ่ง namespace ในที่นี้อาจจะมาจาก module หรือ class ที่เป็นตัว container อีกที
เมื่อเรา implement ชื่อในลักษณะนี้ โดยปกติ Rails จะแถมไฟล์ชื่อ api.rb มาด้วย ซึ่งไฟล์นี้จะมีการกำหนด ชื่อ นำหน้าของ database ไว้ เช่นในกรณีนี้ อาจจะแปลว่าว่า model ที่อยู่ใน namespace api นี้ จะกลายเป็น table ที่มี api_ นำหน้า เช่น
- API::User -> api_users
- API::Profile -> api_profiles
ทีนี้มันอาจจะมีการต้องไปอ้างอิงการใช้งานผ่าน Association
ซึ่งในกรณีที่เป็นการอ้างอิงระหว่าง model ใน namespace เดียวกัน ก็ไม่ต้องใส่ namespace นั้นใน symbol เช่น
class API::User < ApplicationRecord has_one :profileend
การใช้เอกพจน์หรือพหูพจน์ สามารถพิจารณาได้จาก คำสั่งที่เรียก เช่น ถ้าเป็น has_many ซึ่งมีความเป็นหลายตัว อยู่ในตัวเอง เราก็จะใช้พหูพจน์เข้าไป เช่น
class API::User < ApplicationRecord has_many :profilesend
แต่ถ้ามีการเรียกใช้จากคนนอก namespace ตัว ActiveRecord อาจจะเดาไม่ถูกต้อง ให้เราใส่ช่ือ Classname ในการเข้าถึงไปด้วย เช่น
class Session < ApplicationRecord belong_to :user, class_name: 'API::User'end
ทั้งหมดก็เป็นขั้นตอนการใช้ชื่อแบบคร่าวๆ ครับ ในภาพจริง แม้ว่าเราจะตั้งชื่อไม่ตรง convention เราก็สามารถที่จะปรับจูนค่าบางอย่างให้ไปตามเราได้
แต่ตรงนี้ทางทีมผู้พัฒนาก็แนะนำว่า เราไม่จำเป็นที่จะต้องเสียเวลาในการตั้งชื่อหรืออะไร ให้เราจัดการให้ก็เพียงพอ แล้วไปโฟกัสกับเรื่องอื่นดีกว่า