ตอนแรกคิดว่าจะลองใช้ DataMapper แต่ไปๆ มาๆ ยังไงไม่รู้เลยมาลองที่ตัว ActiveRecord ก่อนก็แล้วกัน
หลังจากที่ลองสร้าง Controller กับ View ไปแล้ว ตอนนี้มาขอพูดการสร้าง Model ตามแนวคิดของ MVC ใน merb
ในการจัดการ Model ใน merb นั้นแนะนำมา 3 ตัวคือ
1. ActiveRecord
2. DataMapper
3. Sequel
ผมเลือก ActiveRecord มาเป็นตัวแรก โดย ActiveRecord นั้นถูกสร้างมาด้วยแนวคิด Active Record Pattern ของคุณ Martin Fowler ซึ่งทำหน้าที่จัดการ RDBMS หรืออาจจะเรียกว่า O/R Mapping ก็ได้
ไม่พูดมากแล้ว มาเริ่มต้นกันเลยดีกว่า
ก่อนอื่นเริ่มที่การติดตั้ง ActiveRecord กันก่อน ด้วยคำสั่ง
$gem install activerecord merb_activerecord merb-helpers
ต่อมาทำการสร้าง merb application ด้วยคำสั่ง
$merb-gen app my_application
ผมเลือกใช้ DBRAS คือ mysql ครับ ดังนั้นอย่างแรกที่ต้องทำคือ การกำหนด database configuration ให้กับ merb application ดังนี้
- กำหนด orm ที่จะใช้ ซึ่งผมใช้ ActiveRecord จึงแก้ไขใน file file config/init.rb ดังนี้
dependency "merb-helpers"
use_orm :activerecord
- กำหนด database connection ใน file config/database.yml ดังนี้
:adapter: mysql
:database:
:username:
:password:
:host:
:socket: /tmp/mysql.sock
:encoding:
ต่อมาผมต้องการจะสร้าง Application ทั่วไปให้สามารถทำการเพิ่มข้อมูลและแสดงผลอยู่ในหน้าเดียวกัน ดังนั้นผมจึงเริ่มการสร้างดังนี้
1. ก่อนอื่นผมขอสร้าง table ขึ้นมาก่อนชื่อว่า post มี column ดังนี้
id int
body varchar(500)
create_date datetime
[ ผมชอบออกแบบ database ก่อนเสมอครับ ]
2. สร้าง Model ชื่อ Post ดังนี้ [ ชื่อเดียวกับ Table ]
$ merb-gen model Post
merb จะสร้าง file /app/models/post.rb ขึ้นมาดังนี้
class Post < posts =" Post.find(" order =""> "create_date DESC" )
render
end
6. ทำการแก้ไข View ที่ /app/views/posts/index.html.erb ดังนี้
http://gist.github.com/23498
โดยผมใช้ partial มาใช้ เนื่องจากผมชอบแนวคิดการ reuse ของ element ต่างๆ ซึ่งจากตัวอย่างนี้จะเป็นการ reuse ข้อมูลแต่ละตัวที่เพิ่มเข้าไปในระบบ
จากนี้สามารถลอง run merb ด้วยคำสั่ง $merb ได้ แล้วเข้าไปลอง run ที่ http://localhost:4000/posts
7. เพิ่มส่วนการเพิ่มข้อมูล ซึ่งผมจะเพิ่มในส่วน View ใน file /app/views/posts/index.html.erb ดังนี้
[ ผมเพิ่มไปที่ท้าย file ]
http://gist.github.com/23500
8. แก้ไข controller ใน file /app/controllers/post.rb ผมจะเพิ่ม action create เข้าไปเพื่อทำการเพิ่มข้อมูลลง table เมื่อทำงานเสร็จจะ redirect ไปยัง action index เพื่อแสดงผลข้อมูลทั้งหมด ดังนี้
def create
Post.create( :body => params[ :body ], :create_date => Time.now )
redirect url(:action => "index")
end
9. จะชักช้าอยู่ใยครับ run merb เลยดีกว่า แล้วเข้าไปทดลองใช้งานที่ http://localhost:4000/posts
10. สุดท้าย ผมมี css เพิ่มเข้าไปใน public/stylesheets/master.css ดังนี้
#posts.container {
border: 10px solid #eaeaea;
min-height: 240px;
position: relative;
}
div.post {
position: relative;
border-bottom: 2px solid #c0c0c0;
}
div.post p.body {
color: #3d4043;
}
div.post p.created {
color: #d5d5d5;
position: absolute;
top: 0px;
right: 10px;
font-weight: bold;
font-size: 15px;
}
form {
background-color: #d5d5d5;
padding: 20px;
}
form input[type=text] {
font: 17px "Helvetica", Helvetica,, sans-serif;
padding: 3px 5px;
color: #424242;
}
form button {
font-size: medium;
padding: 5px 10px;
}
คุณ @punneng บอกว่าแรกๆ ก็แบบนี้แหละครับ พอใช้ไป แล้วไปลอง deploy แล้วจะรู้สึกเองครับ อิอิอิ
ที่มา
http://www.socialface.com/slapp/
http://www.rubyinside.com/merb-tutorials-and-resources-716.html
Related link from Roti