March 11th, 2009
เริ่มต้นกับ Ruby On Rails ตอนที่ 3 Make Web Dynamic
1 Comment », RoR, by nolifelover
สำหรับบทความในส่วนของก่อนหน้านี้ผมได้แนะนำการสร้าง controller และ action เบื้องต้นมาแล้วซึ่งสามารถอ่านได้จาก เริ่มต้นกับ Ruby On Rails ตอนที่ 2 Hello World With Rails สำหรับในบทความนี่้ผมจะมาแนะนำการทำให้บทความของคุณเป็น web dynamic โดยการใช้ rails กันครับ
แนะนำการใช้งาน ruby syntax
สำหรับผู้ที่ยังไม่แคยได้ลองเขียน rails จริงๆ อาจจะเกิออาการงงระว่าง
<%%> กับ <%=%>
ว่ามันต่างกันอย่างไร ซึ่งในที่นี้ผมขออธฺบายคร่าวๆ ละกันนะครับ <%%> จะเป็นการใช้ในกรณีที่เราไม่ต้องการให้สิ่งที่อยู่คร่อมด้วยเครื่องหมายนี้แสดงออกมาเป็น html หรือพูดง่ายๆ ว่าไม่ต้องการให้ผู้ใช้งานเห็นแต่หากว่าเปลี่ยนมาเป็น <%=%> จะืำให้ผู้ใช้มองเห็นเนื่องจากจำมีการสร้าง html สำหรับให้ browser นำไปแสดงผลด้วย เราลองมาดูผลกันครับ ให้ทำการแก้ไขไฟล์ helloappviewssayhello.erb โดยการเพิ่มโค้ดตามนี้ครับ
9
10
11
12
13
14
<p>
<ul>
<li>Addition:<%1+1%></li>
<li>Addition:<%=1+1%></li>
</ul>
</p>
<%%> กับ <%=%>ว่ามันต่างกันอย่างไร ซึ่งในที่นี้ผมขออธฺบายคร่าวๆ ละกันนะครับ <%%> จะเป็นการใช้ในกรณีที่เราไม่ต้องการให้สิ่งที่อยู่คร่อมด้วยเครื่องหมายนี้แสดงออกมาเป็น html หรือพูดง่ายๆ ว่าไม่ต้องการให้ผู้ใช้งานเห็นแต่หากว่าเปลี่ยนมาเป็น <%=%> จะืำให้ผู้ใช้มองเห็นเนื่องจากจำมีการสร้าง html สำหรับให้ browser นำไปแสดงผลด้วย เราลองมาดูผลกันครับ ให้ทำการแก้ไขไฟล์ helloappviewssayhello.erb โดยการเพิ่มโค้ดตามนี้ครับ
9 10 11 12 13 14 | <p> <ul> <li>Addition:<%1+1%></li> <li>Addition:<%=1+1%></li> </ul> </p> |

เมื่อได้เข้าไปยัง http://localhost:3000/say/hello เราพบว่าในบรรทัดแรกจะไม่มีการนำค่าที่ได้จากการคำนวนออกมาแสดงผลเนื่องจากว่าการใช้เครื่องหมาย <%%> แต่ในบรรทัดถัดมามีการแสดงค่าที่ได้จากการคำนวนคือ 2 เนื่องจากการใช้งาน <%=%>
การวนลูปที่มีหลากหลาย
ในกรณีที่เราต้องการให้ app ของเราแสดงผลซ้ำอย่างเช่นแสดงผลคำว่า Hello Rails หลายๆ ครั้งเราสามารถเขียนโค้ดได้หลายวิธีมากตามความถนัดของเรา ซึ่งในแต่ละอันจะหมายถึงการแสดง Hello Rails!.. สามครั้งหมด
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<p>
<% 3.times do%>
Hello Rails!..<br/>
<%end%>
<p>
<p>
<% for i in (1..3) do%>
Hello Rails!..<br/>
<%end%>
<p>
<p>
<% (1..3).each do |i|%>
Hello Rails!..<br/>
<%end%>
<p>
<p>
<% 1.upto(3) do |i|%>
Hello Rails!..<br/>
<%end%>
<p>
<p>
<% 3.downto(1) do |i|%>
Hello Rails!..<br/>
<%end%>
<p>
สนุกกับเวลา
ใน rails ผมบอกเลยว่าทุกสิ่งทุกอย่างที่เขียนลงไปในโปรแกรมแถบจะเหมือนภาษาของมนุษย์ครับ ซึ่งในเรื่องเวลาก็เหมือนกันเราลองมาเล่นกับเวลาดูกันเลยครับ ให้แก้ไขโค้ดเพิ่มเติมในส่วนของ helloappviewssayhello.erb โดยเพิ่มโค้ดในส่วนด้านล่างลงไป
40
41
42
43
44
45
46
47
48
49
50
51
52
<p>
Playing wirh Time
<ul>
<li>Time.now <%=Time.now%></li>
<li>1.hours.ago <%=1.hours.ago%></li>
<li>1.hours.from_now <%=1.hours.from_now%></li>
<li>Time.now.at_beginning_of_day <%=Time.now.at_beginning_of_day%></li>
<li>Time.now.at_beginning_of_month <%=Time.now.at_beginning_of_month%></li>
<li>Time.now.at_beginning_of_year <%=Time.now.at_beginning_of_year%></li>
<li>Time.now.at_midnight<%=Time.now.at_midnight%></li>
<li>Time.now.to_date <%=1.hours.ago%></li>
</ul>
<p>
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <p> <% 3.times do%> Hello Rails!..<br/> <%end%> <p> <p> <% for i in (1..3) do%> Hello Rails!..<br/> <%end%> <p> <p> <% (1..3).each do |i|%> Hello Rails!..<br/> <%end%> <p> <p> <% 1.upto(3) do |i|%> Hello Rails!..<br/> <%end%> <p> <p> <% 3.downto(1) do |i|%> Hello Rails!..<br/> <%end%> <p> |
สนุกกับเวลา
ใน rails ผมบอกเลยว่าทุกสิ่งทุกอย่างที่เขียนลงไปในโปรแกรมแถบจะเหมือนภาษาของมนุษย์ครับ ซึ่งในเรื่องเวลาก็เหมือนกันเราลองมาเล่นกับเวลาดูกันเลยครับ ให้แก้ไขโค้ดเพิ่มเติมในส่วนของ helloappviewssayhello.erb โดยเพิ่มโค้ดในส่วนด้านล่างลงไป
40
41
42
43
44
45
46
47
48
49
50
51
52
<p>
Playing wirh Time
<ul>
<li>Time.now <%=Time.now%></li>
<li>1.hours.ago <%=1.hours.ago%></li>
<li>1.hours.from_now <%=1.hours.from_now%></li>
<li>Time.now.at_beginning_of_day <%=Time.now.at_beginning_of_day%></li>
<li>Time.now.at_beginning_of_month <%=Time.now.at_beginning_of_month%></li>
<li>Time.now.at_beginning_of_year <%=Time.now.at_beginning_of_year%></li>
<li>Time.now.at_midnight<%=Time.now.at_midnight%></li>
<li>Time.now.to_date <%=1.hours.ago%></li>
</ul>
<p>
40 41 42 43 44 45 46 47 48 49 50 51 52 | <p> Playing wirh Time <ul> <li>Time.now <%=Time.now%></li> <li>1.hours.ago <%=1.hours.ago%></li> <li>1.hours.from_now <%=1.hours.from_now%></li> <li>Time.now.at_beginning_of_day <%=Time.now.at_beginning_of_day%></li> <li>Time.now.at_beginning_of_month <%=Time.now.at_beginning_of_month%></li> <li>Time.now.at_beginning_of_year <%=Time.now.at_beginning_of_year%></li> <li>Time.now.at_midnight<%=Time.now.at_midnight%></li> <li>Time.now.to_date <%=1.hours.ago%></li> </ul> <p> |

จากโค้ดในส่วนนี้จะเห็นได้ว่าในการเขียนโค้ดที่เกี่ยวกับเวลาทุกบรรทัดที่ได้ยกตัวอย่างมีลักษณะคล้ายกับภาษามานุษย์มาก เช่นผมต้องการเวลา 1 ชั่วโมงก่อนสามารถใช้ 1.hours.ago ได้เลย
Controller และ View
ในกรณีที่เราต้องการส่งค่าที่ได้จากการคำนวนหรือประมวณผลไปให้ view แสดงเราสามารถใช้เครื่องหมาย @ นำหน้าได้จะืำืำทำให้ view สามารถเห็นตัวแปรนั้นที่ controller สร้างได้ ตัวอย่างให้ทำการแก้ไข helloappcontrollerssay_controller.rb
1
2
3
4
5
6
7
class SayController < ApplicationController
def hello
@time = Time.now
end
def bye
end
end
1 2 3 4 5 6 7 | class SayController < ApplicationController def hello @time = Time.now end def bye end end |
จากนั้นให้เราทำการเพิ่มโค้ดในส่วนของการแสดงผลของ action hello โดยแก้ไขไฟล์ helloappviewssayhello.erb ดังนี้
53 54 55 56 57 58 59 60 61 62 63 64 | <p> Playing with @time <ul> <li>@time <%= @time%></li> <li>@time.ago(1.hours) <%= @time.ago(1.hours)%></li> <li>@time.at_beginning_of_day <%=@time.at_beginning_of_day%></li> <li>@time.at_beginning_of_month <%=@time.at_beginning_of_month%></li> <li>@time.at_beginning_of_year <%=@time.at_beginning_of_year%></li> <li>@time.at_midnight<%=@time.at_midnight%></li> <li>@time.to_date <%=@time.to_date%></li> </ul> <p> |

จากการแสดงผลเราพบว่าตัวแปร @time ที่ส่งมาจาก Controller สามารถใช้งานได้ใน view โดยให้ผลการแสดงเหมือนกันกับการใช้ Time.now
108 views

สอนบ้างๆ ฮาๆ …