====== อภิธานศัพท์ Rails ====== * **ActiveRecord**: หรือที่รู้จักกันในชื่อของ AR, ActiveRecord เป็น ORM เริ่มต้นของ Ruby on Rails * **ActionMailer**: [[http://newwiki.rubyonrails.org/contributing/wiki-team|Action Mailer]] คือเฟรมเวิร์คของ Rails ที่ให้บริการเกี่ยวกับการส่งอีเมล์ * **AM**: ดู ActionMailer * **AR**: ดู ActiveRecord * **BDD**: Behavior Driven Development เป็นเหมือน Test Driven Development (TDD) ขั้นสูงที่ใช้วิธี "Drive development from the outside in" และ "เขียนชื่อ method ทดสอบเป็นรูปประโยค" วิธีนี้คิดค้นขึ้นมาโดย [[http://dannorth.net/introducing-bdd|Dan North]] * **Controller**: Controller เป็นส่วนประกอบนึงของแพทเทิร์น [[http://en.wikipedia.org/wiki/Model-view-controller|Model-View-Controller]] มีหน้าที่ในการจัดการ "ตรรกะทางธุรกิจ" หรือจะอธิบายง่ายๆได้ว่ามีหน้าที่ในการประสานงาน - โดยการ map action ของผู้ใช้เข้ากับ models ไม่ว่าจะเป็นการสร้าง แก้ไข หรือทำลาย record ในฐานข้อมูล ทั้งหมดจะถูกเรียกผ่าน controller นี่ล่ะ นอกจากนั้น controller ยังมีหน้าที่ในการเลือก view ที่จะแสดงให้ผู้ใช้ด้วย * **CRUD**: CRUD คือการกระทำสี่อย่างที่ทำได้กับ resource - ''Create'' (สร้าง), ''Read'' (อ่าน), ''Update'' (แก้ไข), และ ''Delete'' (ลบ) * **DRY**: [[http://en.wikipedia.org/wiki/Don%27t_repeat_yourself|Don't Repeat Yourself]] (DRY) คือปรัชญาในการทำงานที่เน้นการลดโค้ดซ้ำซ้อนให้มากที่สุดเท่าที่จะทำได้ * **Migrations**: Migrations คือวิธีในการเก็บเวอร์ชั่นของฐานข้อมูล มีประโยชน์มากเวลาคุณมีนักพัฒนาหลายๆคนหรือว่าต้องการ deploy เวอร์ชั่นใหม่ไปที่เซิร์ฟเวอร์ โดยนักพัฒนาหรือสคริปต์การ deploy สามารถเรียกใช้ migration ด้วยคำสั่ง ''rake db:migrate'' เพื่ออัพเกรดโครงสร้างฐานข้อมูลเป็นเวอร์ชั่นใหม่โดยไม่ทำลายข้อมูลที่มีอยู่แล้วในตารางต่างๆ (นอกจากว่าคุณบอกให้ migration ลบอะไรออกไป) เวลาใช้งาน migration จะถูกเรียกใช้ตามลำดับ โดยดูจากเวลาที่อยู่ในชื่อไฟล์ในไดเร็คทอรี่ db/migrate คุณสามารถสร้าง migration ใหม่ได้โดยใช้คำสั่ง ''script/generate migration MyMigration'' * **Model**: Models เป็นส่วนประกอบนึงของแพทเทิร์น [[http://en.wikipedia.org/wiki/Model-view-controller|Model-View-Controller]] ใน Rails ปกติแล้ว model เป็นตัวแทนของตารางหนึ่งในฐานข้อมูลและ inherit มาจาก ActiveRecord::Base นอกจากนั้น model ยังสามารถเป็นตัวแทนของ mailer โดย inherit จาก ActionMailer::Base, เป็น observer โดย inherit จาก ActiveRecord::Observer, หรือจะ inherit จากคลาสใน gems หรือ plugins, หรือทำตัวเป็น utility class ก็ได้ ที่เก็บ model ต่างๆจะอยู่ในไดเร็คทอรี่ app/models * **Model-View-Controller**: [[http://en.wikipedia.org/wiki/Model-view-controller|Model-View-Controller]] (MVC) คือแพทเทิร์นการเขียนโปรแกรมที่แบ่งโปรแกรมออกเป็นสามส่วน คือส่วนการเก็บข้อมูล, ส่วนตรรกะทางธุรกิจ (ซึ่งมีหน้าที่แก้ไขข้อมูลและรับคำสั่งจากผู้ใช้), และส่วนการนำเสนอ (ซึ่งแสดงข้อมูลต่างๆ) กรุณาดู Model, View, และ Controller สำหรับความหมายของแต่ละส่วน * **ORM**: ย่อมาจาก [[http://en.wikipedia.org/wiki/Object-relational_mapping|Object-relational mapping]] หน้าที่ของ ORM คือการแปลงค่า scalar เป็นออบเจ็คต์และกลับกัน โดยปกติแล้วข้อมูลจะถูกแปลงไปมาระหว่างที่เก็บข้อมูลต่างๆ (ปกติจะเป็นฐานข้อมูล) และภาษา Object Oriented (ในกรณีนี้คือ Ruby) ตัว ORM เริ่มต้นที่มากับ Rails เรียกว่า [[http://api.rubyonrails.org/classes/ActiveRecord/Base.html|ActiveRecord]] ลองอ่าน [[http://guides.rubyonrails.org/index.html|Rails guides]] ดูเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ [[http://api.rubyonrails.org/classes/ActiveRecord/Base.html|ActiveRecord]] คุณสามารถใช้ ORMs อื่นๆได้ใน Ruby on Rails 3 ไม่ว่าจะเป็น [[http://datamapper.org/doku.php|DataMapper]] และ [[http://sequel.rubyforge.org/|Sequel]] * **REST**: [[http://en.wikipedia.org/wiki/Representational_State_Transfer|Representational State Transfer]] (REST) คือแพทเทิร์นสำหรับอ้างอิงถึงและจัดการกับ resources (ทรัพยากร) Rails ใช้ REST สำหรับทำ CRUD อย่างแพร่หลายในเฟรมเวิร์ค ยกตัวอย่างเช่น ถ้าคุณส่ง HTTP request โดยใช้ method ''GET'' ไปที่ ''/students/9'' คุณจะได้รับทรัพยากร (ในที่นี้คือนักเรียน) ซึ่งมีรหัส 9 กลับมา แต่ถ้าคุณส่ง request เดียวกันโดยใช้ method ''DELETE'' แทนจะหมายความว่าคุณต้องการลบทรัพยากรนี้ * **Scaffolding**: การสร้าง models, migrations, views และ controllers โดยอัตโนมัติ * **Skinny Controller, Fat Model**: เป็นหลักการที่บอกว่าโลจิกต่างๆใน controller ควรถูกย้ายไปไว้ที่ model การทำเช่นนี้จะทำให้โค้ดใน controller ลดน้อยลงและส่งเสริมการ reuse มากขึ้นเพราะว่าโค้ดที่สำคัญจะอยู่ใน model แทน นักพัฒนา Rails ใหม่ๆมักจะชอบเพิ่มโค้ดที่เป็นโลจิกไปไว้ใน view หรือ controller มาก แต่พอเริ่มพัฒนาไปได้ซักพักก็จะเริ่มย้ายโค้ดต่างๆ "ลงไป" ที่ model แทน ศัพท์คำนี้มาจาก [[http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model|Jamis Buck]] หนึ่งในนักพัฒนาหลักของ Rails * **TDD**: Test-driven development เป็น [[http://en.wikipedia.org/wiki/Agile_software_development|เทคนิคการพัฒนาแบบ Agile]] ที่เริ่มจากการเขียนโค้ดเพื่อทดสอบความต้องการของระบบก่อน จากนั้นจึงเขียนโค้ดเพื่อให้ระบบทำงานได้ * **View**: Views เป็นส่วนประกอบนึงของแพทเทิร์น [[http://en.wikipedia.org/wiki/Model-view-controller|Model-View-Controller]] ความรับผิดชอบหลักของ view คือการสร้าง "หน้าเว็บเพจ" ที่จะถูกแสดงให้ผู้ใช้นั่นเอง นอกจากนั้น view ยังรับหน้าที่ส่งการกระทำต่างๆของผู้ใช้ที่ทำผ่านเบราเซอร์ไปให้ controller และแสดงผลลัพธ์จาก models คุณสามารถใช้ภาษา markup หลายภาษาเพื่อเขียน view โดยปกติแล้ว Rails ใช้ภาษา [[http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/|ERb]] แต่คุณสามารถใช้ภาษาแม่แบบ (template) อื่นๆเช่น [[http://haml-lang.com/|Haml]] และ [[http://github.com/why/markaby/tree/master|Markaby]] ได้เช่นกัน