คราวนี้ลองมาดูกฎการตั้งชื่อ Model บ้าง
Model จะมาคู่กับ Database Table เสมอ
โดยชื่อ Model ต้องเป็นเอกพจน์ ส่วนชื่อ Table ต้องเป็นพหูพจน์
class Property < ActiveRecord::Base
ชื่อ table ที่ประกบกับ model นี้ ก็ต้องเป็น
properties
ที่น่าสนใจก็คือ Rails ใช้กฎอะไรในการแปลง เอกพจน์ เป็น พหูพจน์
class ที่เกี่ยวข้องในเรื่องนี้ อยู่ใน package ActiveSupport
มีชื่อว่า
Inflections
กับ Inflector
ลองดูตัวอย่าง ตารางการแปลงของ Rails ดู
inflect.plural(/$/, 's')
inflect.plural(/s$/i, 's')
inflect.plural(/(ax|test)is$/i, '\1es')
inflect.plural(/(octop|vir)us$/i, '\1i')
inflect.plural(/(alias|status)$/i, '\1es')
...
inflect.irregular('person', 'people')
inflect.irregular('man', 'men')
inflect.irregular('child', 'children')
...
inflect.uncountable(%w(equipment information rice money species series fish sheep))
ถ้าอยากรู้ว่าอะไรแปลงเป็นอะไร ก็สามารถใช้
script/console
ทดสอบดูได้~/projects/rail/akando_dev $ script/console
Loading development environment.
>> "person".pluralize
=> "people"
>> "mouse".pluralize
=> "mice"
>>
ทีนี้กระโดดไปที่ scaffold บ้าง
เวลาที่เราสั่ง generate scaffold เราใช้คำสั่งต่อไปนี้
script/generate scaffold modelName
แน่นอน modelName ที่ระบุใน scaffold อยู่ในรูปเอกพจน์
แต่ชื่อของ controller ที่ scaffold generate ให้นี้จะอยู่ในรูป พหูพจน์
เช่น
script/generate scaffold Property
จะได้
class PropertiesController
ใน file properties_controller.rb
เรื่องการใช้เอกพจน์ หรือพหูพจน์นี้ จริงๆพอใช้ไปสักพัก ก็จะเริ่มรู้สึก
เป็นธรรมชาติขึ้น (ฝรั่งคงไม่มีปัญหา เพราะเป็นภาษาเขา)
ซึ่งมันก็สื่อดีเหมือนกัน เช่น
Project.find(1)
ย่อมดีกว่า
Projects.find(1)
----
project = Project.find(1)
project.milestones.each {|milestone|
...
}
ดูดีกว่า
project.milestone.each {|milestone|
...
}
No comments:
Post a Comment