gem->ตัวช่วยติดตั้ง package ของภาษา ruby
irb.bat เป็น interpreter ของภาษา ruby แบบ interactive
เว็บapp ขนาดเล็กจะใช้ mongrel เป็น เว็บ server แต่พอมีขนาดใหญ่จะใช้ apache แทน
rails ถูกออกแบบมาให้ไม่ใช้ xml
controller ของ Rails จะต้องเขียนด้วยภาษา Ruby แต่จะสร้าง html ด้วย การ render views template ซึ่งจะเขียนด้วย ภาษา ruby+helper(เป็นตัวช่วยสำหรับการสร้างviews template เช่น รูปแบบการ link )
action คือ method โดยที่้เราออกแบบให้ทำหน้าที่หนึ่งๆโดยส่วนใหญ่จะเอา action ที่ใช้ทรัพยากรร่วมกัน ไปไว้ใน controller เดียวกัน
syntax
rails myapp
ruby script\server //run webserver
ruby script\generate -h // ดูว่าเราสามารถสร้างไรได้บ้าง
ruby script\generate controller name action ..
โดยที่ code generator จะสร้างไฟล์
index/html.erb
name_controller.rb
name_helper.rb
name_controller_test.rb
ActionPack(ActionController &ActionView)
View Template ->ไฟล์ที่จะถูก view แปลงเป็น html แล้วส่งกลับไปแสดงผลใน browser โดยเราสามารถเขียนแสดงผลลัพธ์ที่ำจากการคำนวณจาก model ที่ส่งผ่าน controller ซึ่งรูปแบบการเขียน มี2 อย่างคือ
1. Scriptlet <%now =Time.new %>
2.Expression <%=now %>
view template จะถูก render โดย action ใน controller
เมื่อมีการส่ง Parameter แบบ Post จะมีการสร้่าง hash ที่ชื่อ params แล้วเก็บค่า name กับ value ที่อาจจะได้จากการ routing path
Request Parameter "id"
/controller/action/id ? parameter=value
Rais Environment คล้ายกับการจัดสิ่งแวดล้ิอม ให้กับการserver แบบไหน
development ->กำลังพัฒนา
Test -> ตรวจสอบโปรแกรม
Production ->เสร็จ 2 อย่างแรก แล้ว
สามารถเลือก option ได้โดย ruby script\server -e production
Logging the Request
ไฟล์ .log ใน \logs ของทุกเว็บ app
มี logger ให้ controller และ model เขียน logging ใส่ไฟล์
เช่น logger.info // ระดับความสำคัญของข้อมูล(info ,warning ,error)
Raising Exception ให้โปรแกรมที่ถูกเรียกทำงานส่งข้อมูลกลับไปบอกผู้เรียกว่าเกิดข้อผิดพลาด
จะทำให้ การจัดการ request หยุดลงแล้ว ข้อมูลของ raise จะถูกส่งออกไปที่ browser
raise ___
Flash -> hash ที่ถูกสร้างขึ้นอัตโนมัติสำหรับให้ action กำหนดข้อความที่จะถูกนำขึ้นบน view template
โดยที่ action จะสร้าง render เสร็จทำลายทิ้ง
flash[:msg]="____"
เวลา request ถ้าเป็น controller แล้ว action เป็น index ให้เรียก
/controller/?.....
แต่ถ้า action มีชื่ออื่นจะเรียกด้วย
/controller/actionName/?....
interpulation ->กลไกสำหรับแทนค่าตัวแปรลงใน string
เ่ช่น str="World!"
puts "Hello "+str หรือ puts"Hello #{str}" // Hello World!
View Rendering
render{:action =>
หรือ render :action=>:hello
"hello"
การ render :action จะ render view template ที่อยู่ในcontroller เดียวกันเท่านั้น
ซึ่งโดย default ของการ render เช่น เรา สร้าง action 'index' ไว้ ถ้าำไม่มีการระบุว่า render ที่ใด
ก็จะไป render ที่ View template ที่มีชื่อเดียวกับ action
Render Template
render:template =>
Redirection เรียกกลับมาใหม่ที่actionที่เว็บแอป เดียวกัน ต่างกันก็ได้ ข้ามเว็บก็ได้
redirection_to :action=> :ชื่อ action
เหมือนกลับมาใช้ action เดิม แต่ไม่มีการส่งพารามิเตอร์แล้ว
redirect_to :action=>:actionname,:name => params[:name]
redirect_to :action =>:______ , :controller=>:_____
redirect_to :url=>"______"
Action Call and Rendering
action หนึ่งสามารถ redirect ไำด้ครั้งเดียว เช่น หากมีการใช้ action อื่น แล้ว render View ของ action อื่นก็จะำไม่สามารถ render viewtemplate ของตัวเองได้เนื่องจากป้องกันการเรียกตัวเอง
ซึ่งมี2วิธีในการแก้ไข
1.หลีกเลี่ยงการ render view template ตัวเอง
2.หากต้องการ render view template ตัวเองก็ใช้ action อื่นช่วยทำงานแล้วกลับมา render
view template ตัวเอง
3.redirect action อื่นเทน
Rendering Text
render:text =>
render :inline => "<%script ruby เพื่อเลือก View template Render%>"
Template
เราสามารถ สร้าง template ขึ้นเองได้ โดยเราเิอาไปไว้ใน (app/view)แต่ให้เป็น.html.erb
<%=render %>
จะ render จาก view template (app\views)
ส่ง Hash to Template
<%= render "bye",{:name1=>"___", :name2=>"___"}%>
เวลาอ้างอิง
<%=name% > //เป็นการอ้างอิงแบบ local ซึ่งสามารถทำได้โดย ไม่ต้องใช้ params[...]
เนื่้องจากมีการrender แล้วส่ง hashไปแล้ว
Partial เป็นส่วนของpage สำหรับถูก renderได้จาก view template ของทุกๆ controller นำหน้่าด้วย
<%=render :partial =>
เช่น <%=render :partial =>"
การส่ง Hash ไปยัง Partial
<%=render :partial =>"___",:locals=>{:__ =>"___"}>
Passing Collection to partials พวก hash ,array ที่ส่งมา
<%=render:partial=>
@greets=["___","___","___"]
<%render:partial => "greet",:collection =>@greets%>
Partial spacer
<%=render :partial=>"greet",:collection=>@greets,:spacer_template=>"myspacer"%>
แทรกระหว่างการ render แต่ละสมาชิกใน@___s
Layout วางโครงสร้าง page ถูก render ก่อน View template
-อยู่ใน \app\views\layouts
-ถ้าชื่อเหมือนกับ controller ก็จะเป็น default
Default Layout ชื่อเหมือน controller ทีู่ถูก render มากับ view template
โดยลำดับการ render จะเริ่มดังนี้
default layout ของ controller => default layout ของ application => View template(no layout)
Overriding Default layout
สามารถกำหนด
layout "___"ได้เลย ใน controller ดังนั้น ทุก viewtemplate โดนหมด
layout "___",:only => :index
layout "___", :except => :index
layout"___" ,:except =>[:hello,:hi]
Filter-> ก่อนการทำงา่น action
->หลังจาก view template ถูกเรียกเสร็จ ไม่งั้นทุก action โดนหมด
before_filter :__ :only=>__,:except=> :___
after_filter :___
Filter chain
before_filter :a,:b ทำตามลำดับ
prepend_before_filter :c
Inline Filter
before.filter do |c|
end
Around_filter :
def filtername
---- } do as before_filter
----
yield } do action
---- } do as after_filter
---
end
ไม่มีความคิดเห็น:
แสดงความคิดเห็น