Routing
the two purpose of Routing
- Recognizing URLs -> เพื่อที่จะให้appliction ตัดสินใจว่าจะทำอะไรเมื่อมี request เข้ามา
-Generating URLs ->เนื่องจากได้มีการให้ใช้ high-level syntax ใน view template ดังนั้นมันก็จะ generate Urls path ในการ link ด้วย html ให้
ตัวอย่าง sample route
map.connect 'student/:profile',:controller=>"student",:action=>"show"
static string คือ student (ช่วยให่้จำprocess ได้ )
wildcard url component คือ :profile จะเป็นเหมือนตัวรับค่าโดยจะรับค่าอะไรนั้นขึ้นอยู่กับตำแหน่งที่ให้ค่าใน string pattern ซึ่งจะรับค่ามาจาก request url โดยทีี่่เราจะ accessค่านั้นได้จาก ในaction ใน controller โดยผ่านhash ที่ส่งมาตามrequest มายังaction เช่น request url คือ http://localhost:
3000/student/benz ดังนั้น params[:profile] ก็จะมีค่าิำ'benz'
bound parameter คือ(:controller =>"student", :action =>"show") เป็นตัวที่จะตัดสินใจว่า เมื่อมี request Urlมา จะให้ไปไหน
ก็คือ เมื่อมี request มา มันก็จะมาเช็คว่าตรงกับpattern string หรือป่าว ถ้าตรงจะไปยัง action ใน controller ตามที่map ไว้
Default route
map.connect ':controller/:action/:id'
โดยปกติแล้วเวลาเราค้นข้อมูลจาก database เราก็จะ:id ของมันมาแล้วส่งไปตาม request ไปยัง controller เพื่อ นำ id ไปอ้างอิงต่อได้
Default route generation
The Ante default route and respond_to
map.connect ':controller/:action/:id/:format' จะมีการรับ format เข้ามาด้วยซึ่งเราสามารถใช้ respond_to ในการเขียนaction ที่ให้ผลลัพธ์ที่แตกต่างกันได้ขึ้นอยู่กับ request format (HTML or XML)
The Empty Route
หน้าแรก
map.root :controller =>"homepage"
แต่ต้องลบ index .htmlใน /public ออกก่อน
the custom Route
หน้า ที่ requestไม่match กับ route
Route Order
มีผลต่อการmatching Route ถ้ามีการสลับตำแหน่งของ bound_parameter หรือ wildcard ก็จะไป
Using Literal Url
<%=link_to "help","/main/help"%>
Route Globbing
เมื่้อเราต้องการให้request ไปยังaction ที่เราต้องการแล้วให้ action นั้นจัดการกับrequest ที่เหลือ
เช่น
โดยเราต้องสร้างaction list ในcontroller ก่อน
จากนั้น ทำการ
map.connect 'contry/list/*address'
ในcontroller list
def list
@list= params[:address]
end
เราก็จะได้ @listเข้ามาจัดการได้
ิื์Named Route
name_url ก็ใส่ :action,:controller ไปเลย
name_path เป็นกาีร mapไว้ แล้วอ้างอิงตามรูปแบบที่กำหนด
เช่น
map.connect 'profile/:id '
,:controller =>"profile"
,:action=>"show"
หรือ
map.auction 'auction/:auction_id/item/:id',:controller => "auction",:action=
>"show"
ดังนั้นเราสามารถอ้าง pathใน view templated ได้เช่น
<%=link_to profile_path(profile.id)%>
profile.id จะใส่ เป็น instace ก็ำได้ เนื่องจากมันจะแปลงเป็น id ให้อัตโนมัติ
หรือ
<%=link_to "auction",auction_path(@auction,item)%>
special scope method
คือการรวมกลุ่มที่ใช้ bound parameter หรือ option บางอย่างร่วมกันเช่น
map.with_option :controller =>"main" do |main|
main.help '/help',:action=>"help"
main.contact '/contact' ,:action=>"contact"
end
ปลใช้controller เหมืิอนกัน
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)

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