ตัว ruby on rails ใช้ Active Record
ลองดูหลักการเบื้องต้นก่อน
- การ map เข้ากับ table
ใช้หลักง่ายๆก็คือ ชื่อ class ในรูปเอกพจน์ map กับ ชื่อ table ในรุปพหูพจน์class Person < ActiveRecord::Base
class person map เข้ากับ table persons
end
และ column ทุก column ใน table persons
automatic map เป็น property ของ class Person
Note: จะเห็นได้ว่าตัว class person ต้อง extend base class ที่ชื่อ ActiveRecord - การ map Relationship
class Project < ActiveRecord::Base
belongs_to :portfolio
has_one :project_manager
has_many :milestones
has_and_belongs_to_many :categories
end- belongs_to เป็นได้ทั้ง many-to-one หรือ one-to-one
โดย primary key ของ portfolios => foreign key ของ Projects - has_one มีลักษณะเป็น one-to-one
โดย primary key ของ project => foreign key ของ project_managers - has_many เป็น one-to-many
- has_and_belongs_to_many เป็น many-to-many โดยต้องมี table
หนึ่งสำหรับเก็บ pk ของทั้ง categories และ projects
โดย default table name จะใช้ชื่อว่า categories_projects (เรียงตามลำดับอักษร)
- belongs_to เป็นได้ทั้ง many-to-one หรือ one-to-one
- Aggregate Mapping (hibernate เรียก component mapping)
เป็นการ map attribute ตัวเดียวหรือหลายๆตัวเป็น objectclass Customer < ActiveRecord::Base
composed_of :balance, :class_name => "Money", :mapping => %w(balance amount)
composed_of :address, :mapping => [ %w(address_street street), %w(address_city city) ]
end- customer.balance จะมี datatype เป็น Money
โดย attribute ที่ชื่อ balance จะถูก pass เป็น
parameter ที่ชื่อ amount ใน Money Constructor Method - ส่วน customer.address จะมี datatype เป็น Address
โดยใช้ attribute address_street, address_citry
ในการ initialize Address object
- customer.balance จะมี datatype เป็น Money
- Validation
class Account < ActiveRecord::Base
validates_presence_of :subdomain, :name, :email_address, :password
validates_uniqueness_of :subdomain
validates_acceptance_of :terms_of_service, :on => :create
validates_confirmation_of :password, :email_address, :on => :create
end- presence_of -> Require
- uniqueness_of -> ค่าที่ set ต้อง unique ใน table
- acceptance_of -> case พิสดารหน่อย ไม่มีการเก็บลง table จริง
แต่ต้องการให้มีการ pass ค่ามา
(เห็นเขายกตัวอย่าง use case กรณี หน้าจอที่ต้อง tick accept license) - confirmation_of ->case พิสดารเช่นกัน เขายกตัวอย่างพวก password
confirmation ที่ค่า 2 ค่าต้องตรงกัน
- presence_of -> Require
- Self Relate RelationShip (พวกที่ structure เป็น tree)
class Item < ActiveRecord::Base
belongs_to :list
acts_as_list :scope => :list
end - Etc. -> Callback, Observers, Inheritance, Transaction
จะเห็นได้ว่า Powerfull เหลือเฟือเหลือใช้
เป็นทางเลือกอีกทางที่น่าสนใจ
No comments:
Post a Comment