วันพุธที่ 9 มิถุนายน พ.ศ. 2553

The Rails way:chapter 4

เหตุผลที่สำคัญที่ เหล่าำพวกพัฒนาเว็บ ทั้งหลายต้องเผชิญกันก็คือ
การพิจารณาการตั้งชื่อและการจัดการ roucesและ actionใน application
REST ป็นข้อกำหนดที่กำหนดขึ้นเพื่อการกระทำร่วมกันระหว่างองค์ประกอบของระบบ
ข้อกำหนดของ RESTได้แก่
-การใช้ client -server architecture
-Stateless communication เว็บsever ส่งข้อมูลกลับมาที่ client แล้ว การเชื่อมต่อจะถูกปิดทันที (ที่ตรงกัน ข้ามก็คือ statefull => เมื่อserver ส่งข้อมูลกลับมาให้client การเชื่อมต่อยังไม่ถูกปิด แต่จะค้างไว้จนกว่าจะมีการสั่งให้ปิด connection)
-Explicit signaling of response cacheability อันนี้ไม่รุคือไร

REST ถูกdesign มาเพื่อ ช่วยในการให้บริการโดยการใช้native Idiom หรือ โครงสร้างของ Http
สิ่งที่เป็นหัวใจของ REST ที่ support ใน Rails ก็คือ เทคนิคที่ใช้ในการname สำหรับ การ route
โดยอัตโนมัติ กล่าวคือ เราสามารถสร้าง name route ที่สามารถระบุname เป็น resource และสร้าง route ต่างๆที่เชื่อมไปยังการ managing resource(CRUD)นั้น ผ่านทาง action ในcontrollerทำได้โดย
map.resources :profiles

Singular and Plural Restful Route
-singular ในrouteที่ไปยังaction show new edit และ destroy ซึ่งเราจะทำบน particular resource
-plural ในroute ที่ำำเกี่ยวข้องกับกลุ่มของ resource

Singular Resource Routes
คือเลือกเอาเฉพาะ routeที่เป็น singular เนื่องจากเราต้องการแค่เพียงsingularโดยที่ในfile config/routes.rb ต้องเพิ่ม

map.resource :student

Nested Resources
ใช้สำหรับresource ที่มีมีความเกี่ยวข้องกันกับ อีกresourceหนึ่งเช่นการเสนอราคานั้นอยู่ในส่วนหนึ่งการประมูล หากเราต้องการเก็บข้อมูลเกี่ยวกับ การประมูลเช่นการประมูลครั้งที่ 1 นั้นมีการเสนอราคาเท่าใดบ้าง
เป็นต้น
auction/1/bids/5

ให้เรานึุกถึงความสัมพันธ์ีระหว่าง การสร้าง blog ที่ user ต้อง login เข้าไปเป็น authorก่อน จากนั้นจึงให้ authorนั้น สร้างบทควา่มได้ โดยที่ author แต่ละคนก็สามารถเขียนบทความได้หลายบทความ หากเราต้องการเข้าไปที่ user ที่มี id =1 บทความที่มี id เป็น 2สามารถทำได้โดย
author/1/article/2
โดยที่หากเราต้องการlink ไปยังหน้า index ของarticle ที่มี author_id=1 สามารถทำได้ โดย
<%=link_to "all article" ,author_articles_path(@author)%>
โดย ที่ @author เป็น instance ที่มี id=1 เราสามารถใส่ทั้ง instance เลย มันจะใส่ idให้อัตโนมัติ

หรือ ถ้าต้องการไปยังหน้า show
<%=link_to "show " ,author_article_path(@author,@article)%>

มีด้วยกัน 2 เหตุผลที่มีการสร้าง Nested Resourceขึ้น
-ความหมายของ Url จะสามารถบอกความหมายบางอย่างเกี่ยวกับ resource แก่ user ได้
-การ routeแบบนี้จะสามารถช่วยให้เราสามารถเข้าถึง auction ได้ง่ายผ่านทาง params[:auction_id] ได้เลยเนื่้องจากการrouteแบบนี้ จะมีการส่ง auction_id ไปตาม request ด้วย

map.resource :auction do|auction|
auction.resource :bids
end

Setting path Prefix
เราสามารถทำการ nested route ได้อีกวิธีหนึ่ง โดยการระบุ :path_prefix เช่น
map.resources :authors
map.resources :articles ,:path_prefix =>"authors/:author_id"

ซึ่งความแตกต่าง ของ 2เทคนิคนี้คือ
nested routes จะต้องแก้ไขในการอ้างอิงpath เนื่องจากจะมีการสร้าง helper tag ที่มีความสัมพันธ์ระหว่างกัน ขึ้นมา เช่น

author_articles_path เป็นต้น

ส่วน การใส่ path Prefix แล้วทำให้เป็น nested route จะแก้ไขง่ายกว่า เป็นการกำหนด routeว่าจะเรียก
articleได้จะต้องมี path_prefix ก่อน เนื่องจากเปลี่ยนที่ route
หากเราใช้

<%=link_to "click_to course " , courses_path ,:method=>"get" %>
จะลิ้งค์ไปยัง /students/:student_id/courses
ต่างจาก nested route
<%=link_to "click_to course" ,student_courses_path,:method =>"get"%>

ก็จะลิ้งค์ไปยัง /students/:student_id/courses


โดยที่เราสามารถตรวจสอบได้จาก rake routes>tmp.txt

ไม่มีความคิดเห็น:

แสดงความคิดเห็น