ผู้เรียนทั้งหลายจะได้มีไว้ทบทวนกันลืม
(เพื่อไม่ให้งง ผมจะอธิบายถึง default assumption ก่อน
กรณี exception หรือ customize จะยังไม่พูดถึง)
เริ่มด้วยเรื่องแรกสุดก่อน ก็คือ Controller และ View
ประเด็นแรก
เริ่มที่เรื่องชื่อของ controller ก่อน
ยกตัวอย่าง
class ProductsController
จะถูกเก็บไว้ใน file products_controller.rb
class HomeController
จะถูกเก็บไว้ใน file home_controller.rb
กรณีที่ชื่อประกอบจากหลายคำ เช่น
class AdminAreaController
ชื่อ file ก็ต้องเป็น admin_area_controller.rb
class PropertiesAdminController
ชื่อ file ก็ต้องเป็น properties_admin_controller.rb
Note: ที่ระดับ controller นี้ จะไม่มีประเด็นเรื่องพหูพจน์หรือเอกพจน์มาเกี่ยวข้อง
(อยากตั้งชื่ออย่างไรก็ว่าไป)
เมื่อเข้าใจวิธีตั้งชื่อแล้ว ก็มาถึงวิธี map url เข้ากับ controller
หลักการก็คือ path แรกสุดของ url จะถูก map เข้ากับ controller
เช่น
http://host:port/products
จะเรียกใช้ controller ProductController
http://host:port/home
อันนี้จะเรียกใช้ class HomeController
http://host:port/admin_area
=> class AdminAreaController
http://host:port/products_admin
=> class ProductsAdminController
url ที่ browser ส่งเข้ามานั้น
Rails คาดหวังว่าจะมีการระบุ action หรือ method มาด้วย เช่น
http://host:port/products/list
ในกรณีนี้ "list" ก็คือชื่อ action(method) ที่ต้องการเรียกใช้
หลักการที่ rails ใช้ solve สำหรับชื่อ action ก็คือ
- ถ้า controller นั้นมี method ที่ชื่อว่า list อยู่
,method นั้นก็จะถูกเรียกใช้ - กรณีที่ controller นั้นไม่มี method ที่ชื่อ list
,rails ก็จะ bypass controller และส่งต่อให้ view ที่ชื่อ list.rhtml ทำงานแทน
แต่ถ้าเราไม่ระบุ action มาเลย เช่น
http://host:port/products
,Rails ก็จะเรียกใช้ default action ที่ชื่อ index
ประเด็นที่สองก็คือ เรื่อง
ความสัมพันธ์ระหว่าง ชื่อของ Controller กับ
Directory ที่เก็บ View
สมมติว่า url ที่เรียกเข้ามามีหน้าตาแบบนี้
http://host:port/products/list
Rails จะมองหา view ที่ชื่อ list.rhtml
ที่เก็บอยู่ภายใต้ Directory $PROJECT/app/views/products/
จะเห็นว่าชื่อ Directory ที่เก็บ View จะเป็นชื่อเดียวกับ Controller
3 comments:
อืม... พึ่งเข้าใจ
ทำไมเมื่อวานไม่เข้าใจแบบนี้ หรือว่าคลุกวงในมากเกินไป เลยเกิดอาการเมาหมัด
ดูรูปด้านล่างเสร็จปุ๊บ...อ๋อ มันเป็นอย่างนี้นี่เอง
ขอบคุณครับ เดี๋ยวจะรอตอนต่อไปนะครับ (กดดันนิด ๆ ^ ^)
อันนี้แหล่ะที่อยากให้เกิด
เมื่อวานตั้งใจให้เกิดอาการ วน loop ในหัว
หาทางออกไม่ได้
ถ้าเราหมกมุ่นมากพอ
จิตใต้สำนึกจะเริ่มเก็บประเด็นนั้นลงไปคิด
ดังนั้นวันนี้แค่เห็นรูป
(ไม่ต้องอ่านคำอธิบาย ยังได้เลย)
ก็จะเกิดอาการปิ๊งนิดๆ ขึ้นมา
RoR นี่มีที่กำหนด concurrent conenction ให้แต่ละ framework ไหมครับ เพราะเท่าที่ลองยิงดู 100 concurrent connection ก็ error 503 แล้วอะครับ
ผมใช้ apache2.0+ruby1.84+mod_fcgi นะครับ
Post a Comment