Tải bản đầy đủ (.pdf) (53 trang)

xây dựng hệ thống thông tin quản lý chung cư trên nền ruby on rails

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.79 MB, 53 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

NGÀNH CÔNG NGHỆ THÔNG TIN

Đề tài

XÂY DỰNG HỆ THỐNG THÔNG TIN
QUẢN LÝ CHUNG CƯ TRÊN NỀN RUBY ON RAILS

Sinh viên: Dương Hồng Khanh
Mã số: 1111527
Khóa: K37

Cần Thơ, 05/2015


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG
BỘ MÔN TIN HỌC ỨNG DỤNG

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

NGÀNH CÔNG NGHỆ THÔNG TIN

Đề tài


XÂY DỰNG HỆ THỐNG THÔNG TIN
QUẢN LÝ CHUNG CƯ TRÊN NỀN
RUBY ON RAILS

Người hướng dẫn
Ths. Hồ Văn Tú

Sinh viên thực hiện
Dương Hồng Khanh
Mã số: 1111527
Khóa: K37

Cần Thơ, 05/2015


LỜI CẢM ƠN
Trong suốt quá trình làm luận văn này em đã nhận được rất nhiều sự giúp đỡ
tận tình, sự ân cần dạy bảo và sự động viên chân thành của thầy hướng dẫn cùng quý
thầy cô trong bộ môn.
Trước tiên em chân thành cảm ơn gia đình em, những người đã tảo tần vất vả
sớm hôm nuôi em ăn học suốt quãng đường học sinh – sinh viên. Em xin cảm ơn tất
cả quý thầy cô, cán bộ giảng viên đã tận tâm giảng dạy, truyền đạt những kiến thức
quý báu cho em suốt chặng đường vừa qua. Em cảm ơn Bộ môn Tin Học Ứng Dụng
đã tạo điều kiện thuận lợi giúp em thực hiện đề tài luận văn này. Em xin chân thành
cảm ơn thầy Hồ Văn Tú đã nhiệt tình hướng dẫn giúp em hoàn thành đề tài luận văn.
Trong khoảng thời gian thực hiện đề tài này, em đã cố gắng để hoàn thành tốt
luận văn, nhưng khó tránh khỏi những sai sót nên rất mong quý thầy cô cảm thông và
giúp đỡ em khắc phục những sai sót.
Em chân thành cảm ơn tất cả những người đã giúp đỡ em.


Cần Thơ, ngày 04 tháng 05 năm 2015
Sinh viên thực hiện
Dương Hồng Khanh

i


MỤC LỤC
LỜI CẢM ƠN .............................................................................................................. i
MỤC LỤC ...................................................................................................................ii
DANH MỤC HÌNH ................................................................................................... iv
DANH MỤC BẢNG .................................................................................................. vi
DANH MỤC KÝ HIỆU VÀ VIẾT TẮT ..................................................................vii
TÓM TẮT ............................................................................................................... viii
ABSTRACT ............................................................................................................... ix
CHƯƠNG I: GIỚI THIỆU.......................................................................................... 1
1.1

Đặt vấn đề ......................................................................................................1

1.2

Lịch sử giải quyết vấn đề ...............................................................................1

1.3

Mục tiêu đề tài ...............................................................................................2

1.4


Đối tượng và phạm vi nghiên cứu .................................................................3

1.5

Nội dung nghiên cứu .....................................................................................3

1.6

Những đóng góp chính của đề tài ..................................................................3

CHƯƠNG II: MÔ TẢ CHI TIẾT BÀI TOÁN VÀ CƠ SỞ LÝ THUYẾT ................ 4
2.1

Mô tả chi tiết bài toán ....................................................................................4

2.1.1

Mô hình hệ thống ....................................................................................4

2.1.2

Các chức năng .........................................................................................4

2.1.3

Đối tượng sử dụng ..................................................................................5

2.2

Các giải pháp liên quan .................................................................................5


2.3

Cơ sở lý thuyết ...............................................................................................6

2.3.1

Ngôn ngữ Ruby .......................................................................................6

2.3.2

Giới thiệu về Ruby on Rails (Rails)........................................................8

CHƯƠNG III: THIẾT KẾ VÀ CÀI ĐẶT GIẢI PHÁP ............................................ 12
3.1

Thiết kế hệ thống .........................................................................................12

3.1.1

Các thực thể chính ................................................................................12

3.1.2

Mô hình CSDL quan hệ ........................................................................14

3.1.3

Usecase model ......................................................................................15


3.1.4

Usecase .................................................................................................18

ii


3.2

Cài đặt giải pháp ..........................................................................................27

3.2.1

Cài đặt môi trường ................................................................................27

3.2.2

Cài đặt những chức năng ......................................................................27

CHƯƠNG IV: KIỂM THỬ VÀ ĐÁNH GIÁ ........................................................... 29
4.1

Kịch bản kiểm thử .......................................................................................29

4.2

Kết quả kiểm thử .........................................................................................30

4.3


Đánh giá .......................................................................................................40

CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ......................................... 41
5.1

Kết quả đạt được ..........................................................................................41

5.2

Hướng phát triển ..........................................................................................41

TÀI KIỆU THAM KHẢO .......................................................................................... a

iii


DANH MỤC HÌNH
Hình 1.1: Mô hình hoạt động của hệ thống.................................................................4
Hình 2.1 Ví dụ phép toán cộng trong Ruby ................................................................7
Hình 3.1: Mô hình CSDL ..........................................................................................14
Hình 3.2: Usecase model – Web quản lý ..................................................................15
Hình 3.3: Usecase model – Web người dùng............................................................16
Hình 3.4: Usecase đăng nhập ....................................................................................18
Hình 3.6: Thêm sự kiện .............................................................................................19
Hình 3.7: Sửa sự kiện ................................................................................................20
Hình 3.8: Xóa sự kiện ...............................................................................................21
Hình 3.9: Quản lý dịch vụ – Usecase chi tiết ............................................................22
Hình 3.10: Thêm dịch vụ ..........................................................................................23
Hình 3.11: Duyệt/xóa yêu cầu ...................................................................................24
Hình 3.12: Usecase quản lý người dùng ...................................................................24

Hình 3.13: Thêm/cấp quyền người dùng ..................................................................25
Hình 3.14: Đăng ký dịch vụ ......................................................................................26
Hình 3.15: Cấu trúc thư mục trong rails framework .................................................27
Hình 4.1: Giao diện trang chủ của admin .................................................................30
Hình 4.2: Biểu mẫu nhập thông tin người dùng........................................................30
Hình 4.3: Thông tin người dùng sau khi thêm ..........................................................31
Hình 4.4: Giao diện trang chủ của tài khoản người dùng .........................................31
Hình 4.5: User không có quyền truy cập trang .........................................................31
Hình 4.6: Thiết lập user .............................................................................................31
Hình 4.7: Cấp quyền user ..........................................................................................32
Hình 4.8: Danh sách quyền của user .........................................................................32
Hình 4.9: Giao diện trang quản lý thông báo ............................................................33
Hình 4.10: Giao diện thông báo mới nhất .................................................................33
Hình 4.11: Biểu mẫu thêm thông báo .......................................................................34
Hình 4.12: Danh sách thông báo ...............................................................................34
Hình 4.13: Xem thông báo mới nhất .........................................................................34
Hình 4.14: Danh sách dịch vụ ...................................................................................35
Hình 4.15: Biểu mẫu thêm dịch vụ ..........................................................................35
Hình 4.16: Thông tin dịch vụ sau khi thêm thành công ............................................36
Hình 4.17: Biểu mẫu thêm thời gian .........................................................................36
Hình 4.18: Thay đổi trang thái của dịch vụ...............................................................37
Hình 4.19: Danh sách dịch vụ mới nhất ....................................................................37
Hình 4.20: Danh sách những dịch vụ mới nhất ........................................................37
Hình 4.21: Thông tin dịch vụ chi tiết ........................................................................38
Hình 4.22: Đăng ký dịch vụ thành công ...................................................................38
Hình 4.23: Trùng thời gian đăng ký ..........................................................................38

iv



Hình 4.24: Giao diện hồ sơ cá nhân ..........................................................................39
Hình 4.25: Thông tin cá nhân và danh sách dịch vụ .................................................39
Hình 4.26: Duyệt đăng ký dịch vụ ............................................................................40
Hình 4.27: Trạng thái của dịch vụ đã đặt được thay đổi ...........................................40

v


DANH MỤC BẢNG
Bảng 3.1: Mô tả nhóm người dùng ...........................................................................16
Bảng 3.2: Danh sách usecase ....................................................................................17
Bảng 3.3: Mô tả chức năng các thư mục trong rails .................................................28

vi


DANH MỤC KÝ HIỆU VÀ VIẾT TẮT
STT Ký hiệu
1
RMS
2
CSDL

Ý nghĩa
Resident management system – Hệ thống quản lý chung cư
Cơ sở dữ liệu

vii



TÓM TẮT
Trong đề tài luận văn này đã nghiên cứu, tìm ra giải pháp tối ưu để quản lý
chung cư. Không giống như những hệ thống quản lý chung cư khác chỉ quan tâm hỗ
trợ người quản trị chung cư quản lý về mặt hồ sơ, tiền điện nước, tiền nhà,... Mà đề
tài này sẽ quan tâm hỗ trợ cả cư dân, giúp cư dân nhận được thông báo, sự kiện, những
dịch vụ của chung cư nhanh và chính xác, đồng thời quản lý luôn việc cho người dân
đăng ký sử dụng dịch vụ.
Hệ thống gồm 2 trang web và một web services, một trang dành cho người quản
trị quản lý thông tin, một trang dành cho người dùng xem thông tin và web services
để hỗ trợ viết ứng dụng.
Hệ thống sẽ có 4 nhóm người dùng cơ bản. Nhóm 1 là ban quản trị chung cư có
toàn quyền quản lý các dịch vụ, thông tin, người dùng. Nhóm đấu thầu quản lý dịch
vụ chỉ được quản lý dịch vụ, sự kiện, khuyến mãi mà họ có quyền. Nhóm người dùng
chỉ được xem thông tin, đăng ký dịch vụ. Nhóm khách có quyền xem thông tin chung
như thông báo, sự kiện, được đăng ký dịch vụ, nhưng một vài chức năng yêu cầu phải
đăng nhập mới có quyền sử dụng.
Đặc biệt hệ thống có thể phân quyền động theo chức năng đã có, người quản trị
có thể tạo ra vai trò (roles) với những quyền tùy ý sau đó gán cho người dùng.
Từ khóa: ruby, rails framework, restful, ajax, quản lý chung cư.

viii


ABSTRACT
In this thesis study, finding the optimal solution for apartment management.
Unlike other apartment management system supports only interested condominium
administrator managing the records, utility bills, rent,... Which topics will concern all
residents support , help residents get the message, event, these services quickly and
accurately condominiums, management and always work for the people registered to
use the service.

The system consists of two sites and web services, a win for the administrator
page information management, a win for users to view pages of information and
services to support writing web applications.
The system will have four basic user groups. The condominium administrators
have full management services, information and user. Group Procurement Service
management managed service only, events, promotions that they have rights. Group
users only see the information, register for the service. Groups have access to general
information such as announcements, events, registration services, but some functions
requiring login access.
Especially decentralized system can under existing functionality, administrators
can create roles with the optional right then assigned to users.
Keywords: ruby, rails framework, restful, ajax, resident management system.

ix


CHƯƠNG I: GIỚI THIỆU
1.1

Đặt vấn đề

Hiện nay, nước ta đang phát triển theo hướng Công nghiệp hóa – Hiện đại hóa
vì thế mà dân số tập trung ở các thành phố lớn tăng rất nhanh. Điều đó đòi hỏi các
khu dân cư phải được xây dựng với số lượng lớn và quy mô để giải quyết nhu cầu về
chổ ở. Vì thế, các vấn đề liên quan được đặt ra là: Làm thế nào để quản lý số lượng
lớn dân cư? Làm thế nào để quản lý tài sản chung của chung cư?
Để giải quyết các vướng mắc được đặt ra, nhiều công ty hàng đầu về phần mềm
quản lý đã cho ra đời các phần mềm quản lý chung cư. Tuy nhiên, đa số những phần
mềm này chuyên về quản lý thông tin chung cư như: quản lý tài sản, quản lý tiền điện
nước… Nói theo cách khác, tính năng nổi bật của các sản phẩm này là hỗ trợ ban

quản trị trong việc quản lý. Bên cạnh một số vấn đề đã được giải quyết từ góc nhìn
của ban quản trị vẫn còn những vấn đề rất cần được giải quyết từ góc nhìn của cư dân
như: Làm thế nào để đăng ký sử dụng tài sản chung? Đăng ký sử dụng những dịch vụ
của chung cư như thế nào?
Để quyết định xây dựng một sản phẩm hay không đều căn cứ vào tầm nhìn đối
với sản phẩm đó. Hai yếu tố quan trọng nhất của tầm nhìn chính là cơ hội và thách
thức. Việc nhìn thấy được nhu cầu xây dựng hệ thống quản lý chung cư và nhìn thấy
được những vấn đề mà những hệ thống khác chưa có, đó là cơ hội. Việc nhận biết
được trên thị trường hiện nay có rất nhiều sản phẩm quản lý chung cư đó là thách
thức. Từ cơ hội và thách thức cho thấy rằng cơ hội khi xây dựng hệ thống quản lý
chung cư lớn hơn so với thách thức, đó là lí do chọn đề tài “Xây dựng hệ thống
thông tin quản lý chung cư trên nền Ruby on Rails”.

1.2

Lịch sử giải quyết vấn đề

Những chung cư ngày nay ngày càng được xây dựng với quy mô lớn và hiện
đại vì thế mà việc quản lý là hết sức cần thiết, nhưng hiện tại việc quản lý chỉ được
quan tâm ở góc nhìn của người quản lý. Sau này việc quản lý chung cư sẽ mang cả
tầm nhìn từ người cư dân, hệ thống quản lý chung cư sẽ tích hợp cả phần quản lý
dành cho người quản trị và phần người dùng dành cho cư dân. Hơn nữa nếu nhìn ở
tầm nhìn của một người phân tích thì sẽ nghĩ đến việc tiện dụng nhất cho người dùng,
hệ thống sẽ có cả phần web services để có thể phát triển nhiều ứng dụng trên nhiều
nền tảng.
 Giai đoạn 1: Thu thập thông tin từ Chung cư Phú Mỹ Hưng – TPHCM.
 Tìm hiểu yêu cầu thực tế của Chung cư Phú Mỹ Hưng – TPHCM.
 Xác nhận các yêu cầu từ Chung cư Phú Mỹ Hưng – TPHCM về hệ thống và
các dịch vụ cung cấp.


1


 Giai đoạn 2: Giai đoạn phân tích
 Dựa vào những thông tin và yêu cầu thiết kế của Chung cư Phú Mỹ Hưng –
TPHCM, phân tích rõ ràng mục đích, yêu cầu, nguyện vọng của Chung cư
Phú Mỹ Hưng – TPHCM.
 Lập bảng kế hoạch thực hiện.
 Căn cứ trên kết quả khảo sát, thông tin do Chung cư Phú Mỹ Hưng –
TPHCM cung cấp, thiết kế lập cấu trúc cho chương trình và thiết kế chung
cho toàn hệ thống.
 Giai đoạn 3: Giai đoạn thiết kế
 Xem xét chi tiết yêu cầu và tiến hành thiết kế chương trình.
 Tiến hành xử lý hiệu ứng ảnh, thu thập tài liệu liên quan.
 Kiểm tra sản phẩm để đảm bảo tính thẩm mỹ và thống nhất.
 Giai đoạn 4: Giai đoạn xây dựng
 Xây dựng CSDL dựa trên thiết kế.
 Soạn thảo nội dung tài liệu, chỉnh sửa hoàn thiện nội dung chương trình.
 Tích hợp hệ thống: lắp ghép phân tích thiết kế, nội dung lập trình thành một
sản phẩm.
 Tiến hành kiểm tra, chỉnh sửa và thực hiện nghiệm thu nội bộ.
 Giai đoạn 5: Giai đoạn chạy thử
 Tổng hợp nội dung, xây dựng hệ thống theo thiết kế.
 Kiểm tra và sửa lỗi.
 Lắp ghép thiết kế với phần mềm, đảm bảo không sai lệch với thiết kế và
phần mềm hoạt động tốt.
 Chạy thử hệ thống.
 Kiểm tra và sửa lỗi.
 Giai đoạn 6: Giai đoạn nghiệm thu
 Chung cư Phú Mỹ Hưng – TPHCM duyệt dự án.

 Đăng tải hệ thống: đảm bảo hệ thống chạy tốt.
 Giai đoạn 7: Giai đoạn chuyển giao
 Đào tạo và huấn luyện Chung cư Phú Mỹ Hưng – TPHCM quản trị hệ
thống một cách hiệu quả.
 Đánh giá, kết quả đạt được.
1.3

Mục tiêu đề tài
 Xây dựng hệ thống quản lý chung cư bao gồm:
 Xây dựng một trang chỉ dành cho người quản lý thông tin chung cư.
 Xây dựng một web services hỗ trợ viết ứng dụng.
 Xây dựng một ứng dụng web dựa trên web services dành cho cư dân.

2


1.4

Đối tượng và phạm vi nghiên cứu

 Đối tượng gồm các chung cư, thành viên trong ban quản lý chung cư và cư
dân sinh sống.
 Phạm vi nghiên cứu: Xây dựng hệ thống thông tin quản lý chung cư trên nền
web, sử dụng ngôn ngữ ruby, rails framework, sử dụng kỹ thuật restful để gửi và nhận
dữ liệu, sử dụng các thư viện hỗ trợ front-end như Jquey, metro-bootstrap, adminLTE,
html5, css3, các plugin của jquery, sử dụng hệ quản trị CSDL MySQL.
1.5

Nội dung nghiên cứu


 Cách sử dụng những câu lệnh trong ngôn ngữ ruby.
 Tìm hiểu về rails framework.
 Tìm hiểu về mô hình MVC trong rails.
 Cách áp dụng restful vào rails.
 Cách tích hợp các module các plugin vào rails.
 Tìm hiểu về web services.
 Cách viết web services dùng rails.
 Cách giao tiếp với web services dùng rails.
 Xử lý dữ liệu kiểu file như upload file .pdf, file hình ảnh, .doc, .xls.
 Kỹ thuật thiết kế web dùng css3, html5, bootstrap, adminLte.
 Tiền xử lý dữ liệu ở client dùng javascript, jquery.
 Tìm hiểu cách sử dụng ajax do rails hỗ trợ.
 Tìm hiểu kỹ thuật responsive để thiết kế giao diện web.
 Tìm hiểu kỹ thuật đa ngôn ngữ được tích hợp sẵn trong rails đồng thời áp dụng
kỹ thuật đó để viết module đa ngôn ngữ bằng javascript.
 Tìm hiểu về kỹ thuật phân quyền động – phân quyền theo chức năng để áp
dụng vào đề tài.
1.6

Những đóng góp chính của đề tài

 Ở trang web dành cho người quản trị thì người quản trị có thể thêm thông báo,
sự kiện, khuyến mãi, dịch vụ, biểu mẫu, thông tin cư dân, cấp quyền cho người dùng
(đối với group admin), quản lý thông tin liên hệ bảo vệ.
 Ở trang web dành cho cư dân thì cư dân có thể xem thông báo, sự kiện, khuyến
mãi, xem và đăng ký sử dụng dịch vụ, xem kết quả đăng ký dịch vụ, tải biểu mẫu,
xem thông tin liên hệ bảo vệ.

3



CHƯƠNG II: MÔ TẢ CHI TIẾT BÀI TOÁN VÀ CƠ SỞ LÝ THUYẾT
2.1

Mô tả chi tiết bài toán
2.1.1

Mô hình hệ thống
Web quản trị + Web services
Trả về kết quả

Gửi yêu cầu

Web người dùng
Hình 1.1: Mô hình hoạt động của hệ thống.
Hệ thống gồm 2 phân hệ: Phân hệ dành cho người quản trị bao gồm cả web
services, người quản trị có thể quản lý (thêm, sửa, xóa) những thông tin trên trang
quản trị. Phân hệ dành cho người dùng, người dùng có thể xem những thông tin do
người quản trị tạo ra, và có thể đăng ký sử dụng dịch vụ của chung cư.
2.1.2

Các chức năng

 Chức năng của trang web quản trị:
 Thêm, sửa, xóa người dùng.
 Thêm, sửa, xóa các quyền.
 Cấp quyền cho người dùng.
 Thêm, sửa, xóa thông báo.
 Thêm, sửa, xóa sự kiện.
 Thêm, sửa, xóa khuyến mãi.

 Thêm, sửa, xóa dịch vụ.
 Thêm, sửa, xóa biểu mẫu.
 Thêm, sửa, xóa liên hệ.
 Thêm, sửa, xóa quy định.
 Chức năng của trang web người dùng:
 Xem thông báo.
 Xem sự kiện.
 Xem khuyến mãi.
 Xem thông tin dịch vụ.
 Đặng ký sử dụng dịch vụ.
 Xem kết quả đăng ký.
 Cập nhật thông tin người dùng.
 Tải biểu mẫu.
4


 Xem thông tin các thành viên trong chung cư.
 Xem thông tin liên hệ.
 Chức năng của web services: Cung cấp các hàm trả về giá trị tương ứng với
từng chức năng của trang người dùng.
2.1.3

Đối tượng sử dụng

 Hệ thống gồm 4 đối tượng chính sử dụng:
 Ban quản lý (Admin): Những người quản lý chung cư.
 Chủ thầu (Merchant): Những doanh nghiệp muốn đấu thầu để quản lý các
dịch vụ. Tùy theo loại dịch vụ mà có thể cấp quyền khác nhau để:
 Thêm, sửa, xóa các dịch vụ, sự kiện, khuyến mãi đến toàn thể cư dân.
 Quản lý dịch vụ của mình, có thể chấp nhận hay không khi người dùng

đăng ký sử dụng dịch vụ.
 Cư dân (Resident): Cư dân có hộ khẩu trong chung cư được cấp sẵn một
tài khoản sử dụng để:
 Đăng kí sử dụng các dịch vụ mà phía doanh nghiệp cung cấp.
 Theo dõi các thông báo liên quan đến chung cư, gửi các phản hồi ngược
lại cho ban quản lý.
 Khách (Guest): Khách có quyền xem thông tin chung như thông báo, sự
kiện, được đăng ký dịch vụ, nhưng sẽ bị hạn chế một số chức năng bắt buột
đăng nhập.
2.2

Các giải pháp liên quan
 Các giải pháp về thiết kế hệ thống, có 2 cách thiết kế:
 Web quản trị, web services và web người dùng viết chung 1 trang web, nếu
dùng cách thiết kế này thì hệ thống sẽ đơn giản hơn, lúc này người quản trị
và người dùng sẽ có cùng trang giao diện nhưng sẽ được phân quyền trên
giao diện, người quản trị sẽ có chức năng thêm, sửa, xóa, còn người dùng
chỉ được xem. Nhưng cách này thì hệ thống khó mở rộng trên nền tảng khác.
 Web quản trị, web services và web người dùng viết tách riêng, nếu dùng
cách này thì giao diện người dùng sẽ được thiết kế độc lập không cần phân
quyền trên giao diện, đặc biệt là có thể phát triển trên nhiều nền tảng như
web, mobile nếu web services được viết tách riêng.
 Để đánh giá một sản phẩm, người ta dựa vào tính kinh tế, khả năng mở rộng
và tiện lợi cho người sử dụng, vì thế mà đề tài sẽ chọn cách viết web
services và web người dùng riêng biệt.
 Các giải pháp về môi trường cài đặt
 Cài đặt trên hệ điều hành Windows, cách này có ưu điểm là đa số người
dùng máy tính quen với hệ điều hành Windows, nhược điểm là các câu lệnh
5



hỗ trợ của rails viết trên giao diện console (cmd đối với Windows và
terminal đối với Linux), nhưng thao tác trên cmd bất tiện và tốn thời gian
hơn so với terminal, hơn thế nữa Windows là hệ điều hành có phí.
 Cài đặt trên hệ điều hành Linux, đa số người dùng máy tính ở nước ta ít sử
dụng Linux nhưng xét về mặt quy trình thì giai đoạn cài đặt môi trường hay
triển khai đều do developer làm nên một người developer họ sẽ biết cách sử
dụng Linux, đặc biệt Rails và Linux đều là mã nguồn mở sẽ mang tính cạnh
tranh cao hơn về mặt kinh tế.
 Mục tiêu cuối cùng của một sản phẩm là mang lại lợi nhuận cao, nhu cầu
của người tiêu dùng luôn muốn có được sản phẩm tốt nhất giá rẻ nhất, vì
thế cài đặt trên hệ điều hành Linux là một lợi thế khi cạnh tranh với các sản
phẩm khác.
2.3

Cơ sở lý thuyết
2.3.1

Ngôn ngữ Ruby

Ruby là một ngôn ngữ của sự cân đối. Nhà phát minh của nó Yukihiro “Matz”
Matsumoto kết hợp các đặc điểm hay từ các ngôn ngữ khác (Perl, Smalltalk, Eiffel,
Ada, và Lisp) để tạo ra một ngôn ngữ cân bằng giữa lập trình hướng chức năng
(functional programming) và lập trình hướng thủ tục (imperative programming) [1].
 Sự phát triển của Ruby [1]
Sau khi được phát hành ra công chúng năm 1995, Ruby đã thu hút nhiều lập
trình viên. Vào 2006, Ruby đã được chấp nhận ở mức phổ cập, điều này được chứng
minh qua số lượng lớn các nhóm người dùng hoạt động tích cực ở các thành phố trên
thế giới và cả các hội nghị liên quan Ruby luôn bán hết vé.
 Tính đối tượng [1]

 Khi bắt đầu viết Matz tham khảo những ngôn ngữ khác để tìm những cú pháp
lý tưởng cho ngôn ngữ mới của ông. Ông nói “Tôi muốn tìm một ngôn ngữ scripting
lợi hại hơn Perl, và hướng đối tượng hơn Python.”.
 Trong Ruby, mọi thứ đều là đối tượng (object). Tất cả thông tin và mã đều có
thể gán thuộc tính (properties) và hành động (actions). Lập trình hướng đối tượng
(Object-Oriented Programming) gọi thuộc tính với tên biến địa phương (instance
variables) và gọi hành động là hàm (method). Cách tiếp cận thuần hướng đối tượng
có thể được thấy rõ ở những đoạn mã áp dụng một hành động lên một con số. Ví dụ:
5.times { print "Tôi *yêu* Ruby!" }
 Ở nhiều ngôn ngữ khác, số và một số kiểu mẫu nguyên thủy (primitive types)
không phải là đối tượng. Ruby chịu ảnh hưởng của ngôn ngữ Smalltalk qua việc gán
hàm và biến đối tượng cho tất cả các kiểu mẫu (type). Điều này làm cho Ruby dể
dùng hơn vì tất cả nguyên tắc về đối tượng được áp dụng thống nhất.

6


 Tính linh hoạt [1]
 Ruby được xem là một ngôn ngữ linh hoạt, vì nó cho phép người dùng thay
đổi các phần tử của nó. Các phần tử tất yếu của Ruby có thể được xoá, định nghĩa lại
tùy theo ý người dùng. Các phần hiện hữu có thể thêm vào. Ruby không cố gắng kìm
chể lập trình viên.
 Lấy một ví dụ, phép cộng (toán học) có thể được thực hiện với toán tử (+).
Nhưng nếu bạn muốn diễn đạt với từ cộng, bạn có thể thêm một hàm vào
lớp Numeric của Ruby:

Hình 2.1 Ví dụ phép toán cộng trong Ruby
 Các toán tử của Ruby chỉ là cách viết dễ đọc của các hàm. Bạn có thể định
nghĩa lại chúng nếu cần.
 Khai báo biến [1]

 Trong khi Ruby rất ít dùng dấu và thay vào đó dùng từ tiếng Anh, có một vài
dấu được sử dụng để miêu tả Ruby. Ruby không có cần cú pháp để khai báo biến. Nó
sử dụng cách đặt tên đơn giản để diễn tả phạm vi (scope) của biến.
 var là biến địa phương (local variable).
 @var là biến đối tượng (instance variable).
 $var là biến toàn cục (global variable).
 Các dấu trên giúp lập trình viên xác định vai trò của từng biến. Bên cạnh đó,
không nhất thiết chèn self. trước các phần tử đối tượng.
 Tính năng nâng cao
 Ruby có rất nhiều chức năng khác, trong số đó bao gồm:
 Ruby có chức năng xử lý ngoại lệ (exception) giống như Java hay Python,
giúp dễ dàng đối phó với lỗi.
 Ruby có thể đọc các thư viện mở rộng (extension library) kiểu động nếu hệ
thống (OS) cho phép.
 Ruby có luồng làm việc (threading) độc lập với cả hệ điều hành. Thế nên,
tất cả nền tảng khác mà Ruby chạy trên sẽ có multithreading bất kể hệ thống
đấy có hỗ trợ hay không kể cả MSDOS.

7


 Ruby rất dễ mở rộng: nó được phát triển chủ yếu cho GNU/Linux, nhưng
có làm việc với các hệ UNIX khác, như Mac OS X, Windows
95/98/Me/NT/2000/XP, DOS, BeOS,...
2.3.2

Giới thiệu về Ruby on Rails (Rails)

 Nguồn gốc của Rails
 Rails ra mắt công chúng lần đầu tiên vào năm 2004, Rails thoạt đầu được dùng

như là nền tảng cho một công cụ quản lý dự án được đặt tên là Basecamp và được tạo
ra bởi nhà phát triển web David Heinemeier Hansson, một nhân viên của công ty phát
triển web 37signals (Mỹ). Ban đầu họ xây dựng Rails không phải với mục đích là xây
dựng ra một framework riêng, chủ tâm ban đầu là dùng nó để xây dựng các ứng dụng
khác của 37signals. Sau đó Heinemeier Hansson thấy tiềm năng của nó giúp cho anh
ấy làm các công việc dễ dàng hơn bằng cách rút ra các tính năng phổ biến như trừu
tượng CSDL và khuôn mẫu (template) bên trong và sau đó nó trở thành phiên bản
đầu tiên được tung ra của Ruby on Rails.
 Trên thực tế Rails được rút trích từ Basecamp, một chương trình mà được cộng
đồng Rails cho là trong quá trình làm chương trình đó thì đã gặp và giải quyết được
rất nhiều các vấn đề phức tạp. Và Rails, một framework bắt nguồn từ chương trình
đó thì nó đã thừa kế được những sức mạnh từ dự án đó. Vì vậy Rails luôn sẵn sàng
có thể giải quyết được các vấn đề thực tế tồn tại trong quá trình phát triển web. Ngoài
ra, ban đầu Rails được xây dựng ra còn với mục đích là để xây dựng các ứng dụng
khác từ nó, bởi vậy Rails trước khi xuất hiện trên thế giới thì nó đã chứng minh được
bản thân nó là một framework rất hữu dụng, chặt chẽ và toàn diện.
 Sau khi phiên bản đầu tiên được tung ra thì cộng đồng Rails cũng đã đóng góp
bổ sung, mở rộng nó và sửa các lỗi được tìm thấy. Và phiên bản mới nhất của Rails
bây giờ là phiên bản 4.2.
 Triết lý của Rails [2]
Rails ra đời cũng như một số framework khác, nó cũng có triết lý riêng của
mình. Bạn cũng có thể phần nào thấy sự khác biệt của Rails thông qua triết lý của nó.
Triết lý của Rails được định hướng bằng cặp khái niệm: “DRY and convention over
configuration” nghĩa là đừng lặp lại chính mình và sự ngầm định thay cho cấu hình.
 DRY từ viết tắt của “Don’t Repeate Yourself”, tức là mỗi phần được biết trong
hệ thống nên sẽ được diễn tả chỉ ở một nơi duy nhất hay hiểu đơn giản là các đoạn
code, đoạn hàm chức năng, các định nghĩa CSDL... sẽ được đặt tại đâu đó trong dự
án và thật dễ dàng, từ mọi vị trí trong dự án bạn có thể gọi nó ra và sử dụng. Rails sử
dụng sức mạnh của Ruby để mang lại điều đó. Khi bạn quyết định thay đổi hoạt động
của một ứng dụng mà dựa trên nguyên tắc DRY, bạn không cần sửa đổi nhiều code

của ứng dụng. Trong khi điều này có lẽ là một điều phức tạp trước đây, đối với rails
nó thực sự đơn giản. Ví dụ, thay vì copy và dán đoạn code với một tính năng tương
tự nào đó, bạn phát triển ứng dụng web của bạn theo cách lưu giữ đoạn code chung
này tại một nơi và gọi nó lại ở nơi cần sử dụng. Nếu hành động gốc cần thay đổi, bạn

8


chỉ cần sửa đổi nó một lần tại một vị trí, thay cho việc phải sửa lại tại các nơi khác
nhau trong ứng dụng.
 Sự ngầm định thay cho cấu hình (Convention over configuration)
 Khái niệm “sự ngầm định thay cấu hình” để cập tới thực tế rằng Rails thừa
nhận một số thứ mặc định khi xây dựng một ứng dụng web điển hình. Không
giống như một số framework khác, yêu cầu bạn phải từng bước cấu hình để
xử lý trước khi cho bạn chạy một ứng dụng dù là đơn giản nhất. Các thông
tin cấu hình đó thường được lưu giữ trong một file XML, các file đó ngày
một lớn lên và rất phiền phức cho công việc bảo trì, cụ thể bạn có thể thấy
điều này rất rõ ở Java. Trong nhiều trường hợp, bạn bị ép phải lặp lại toàn
bộ việc cấu hình khi bắt đầu một dự án mới. Trong khi đó, Rails ban đầu tạo
ra từ một ứng dụng mẫu, kiến trúc của nó là mô hình MVC chuẩn.
Heinemeier Hansson chủ tâm tạo ra Rails theo một cách mà nó không cần
quá tốn sức cho việc cấu hình, miễn là tuân theo một chuẩn ngầm định. Kết
quả là nó không yêu cầu một file cấu hình nào cả. Trên thực tế, nếu bạn
không có nhu cầu thay đổi những chuẩn ngầm định này, Rails thực sự chỉ
cần một file cấu hình ngắn và đơn giản để mà bạn chạy ứng dụng của bạn.
File đó mục đích là tạo kết nối tới CSDL.
 Khi làm việc với Raills, bạn sẽ thấy rất rõ sự ngầm định của Rails được thể
hiện ở rất nhiều trường hợp. Ví dụ ngay khi tạo một dự án với Rails. Rails
đã mặc định tạo ra một dự án theo mô hình MVC. Hay đơn giản là khi đặt
tên một mô hình dữ liệu (model), thì Rails cũng sẽ ngầm định tên của model

đấy là một chữ in hoa, số ít và bảng dữ liệu mà nó liên kết là một chữ thường
số nhiều. Ví dụ model là Book thì tên bảng dữ liệu sẽ được nghi là books.
 Việc ngầm định này ban đầu có thể sẽ khiến người lập trình cảm thấy hơi
khó chịu vì Rails sẽ không khuyến khích bạn đặt tên tùy ý. Tuy nhiên khi
quen nó, bạn sẽ thấy nó rất thú vị, vì giúp bạn tập trung vào viết code, cũng
như giúp bạn đặt tên theo chuẩn điều này giúp ích khi bảo trì hay đọc lại
code sẽ giúp bạn dễ dàng hiểu và nhận ra mỗi file là gì. Ngoài ra cấu hình
ngầm định còn giúp người lập trình tiết kiệm khá nhiều thời gian cho việc
cấu hình.
 Tự động sinh code trong Rails [2]
Ta cũng có thể nói đến Rails với việc sinh code tự động. Khi phát triển trên
Rails, có các thư mục hay file là nơi để điền code vào và tất cả các phần trong ứng
dụng tương tác với nhau một cách chuẩn hóa. Hay nó đã chuẩn bị sẵn một bộ khung
chương trình trước, như vậy sẽ tiết kiệm thời gian và giảm tải những công việc giống
nhau lập lại nhiều lần. Và nhờ có bộ khung đã định nghĩa sẵn này, Rails cung cấp các
generate, rake, script cho phép bạn nhanh chóng tạo, xóa một số template để bạn định
nghĩa model, view, controller hay ngay cả database trong CSDL.

9


 Kiến trúc Model-View-Controller [2]
 Kiến trúc mà Rails sử dụng là kiến trúc Model-View-Controller (MVC), một
kiến trúc mà có rất nhiều các framework đang sử dụng. MVC ra đời nhằm phân chia
các thành phần có liên quan với nhau và khi cần thì dễ dàng móc nối lại. Từ đó làm
cho việc viết code và bảo trì dễ dàng hơn.
 Model là phần chủ yếu chú trọng tới dữ liệu. Nó cho phép bạn đặt ra các
quy tắc với dữ liệu hay quy tắc về nghiệp vụ để thực hiện với dữ liệu.
 View là phần chịu trách nhiệm sinh ra giao diện người dùng, thông thường
được dựa trên dữ liệu trong model.

 Controllers chịu tránh nhiệm phối hợp ứng dụng. Controller nhận sự kiện từ
bên ngoài (thường là trình duyệt), tương tác với Model và hiển thị phù hợp
với người xem.
 Ngoài những ưu điểm chung của framework, Rails cũng có điểm khác biệt của
nó do Rails tích hợp nhiều công nghệ khác vào Rails mà những framework khác
không có.
 Những ưu điểm nổi bật của Rails [2]
Rails có rất nhiều ưu điểm giúp cho các nhà lập trình nhanh chóng phát triển
một ứng dụng web. Giúp cho việc bảo trì ứng dụng cũng trở nên dễ dàng hơn. Để làm
được điều đó là sự hợp nhất của một tập hợp nhiều thành phần nhỏ trong kiến trúc
cũng như là ngôn ngữ mà Rails sử dụng. Sau đây là một số thành phần đã đóng góp
vào sự thành công của framework Ruby on Rails.
 Sự linh hoạt của ngôn ngữ Ruby mà Rails sử dụng.
 Sự trừu tượng hóa CSDL trong Rails với ActiveRecord:
 Chúng ta luôn muốn ứng dụng web của chúng ta lưu giữ thông tin của chúng
trong các mối quan hệ về CSDL. Tuy nhiên để kết hợp giữa việc lập trình
hướng đối tượng với các quan hệ trong CSDL lại không phải là chuyện đơn
giản. Các đối tượng là tất cả gồm dữ liệu và các phép toán, còn CSDL là tất
cả các bộ giá trị. Ta có thể dễ dàng mô tả nó bằng thuật ngữ quan hệ tuy
nhiên nó lại trở nên khó cho việc code trong lập trình hướng đối tượng. Qua
thời gian, cộng đồng đã tìm ra cách để làm cho sự hòa hợp giữa các quan hệ
dữ liệu và hướng đối tượng trở nên thống nhất hơn. Rails đã biết cách trừu
tượng CSDL, giúp cho các nhà lập trình có thể cảm thấy việc tương tác với
các quan hệ dữ liệu trở nên đơn giản hơn trong lập trình.
 ActiveRecord là một tầng ánh xạ quan hệ với đối tượng (object-relational
mapping hay ORM) được hỗ trợ bởi Rails. ActiveRecord được xây dựng
gần giống tiêu chuẩn mô hình ORM. Mô hình ORM cho phép các bảng ánh
xạ tới các lớp, các hàng tới các đối tượng và các cột tới các thuộc tính. Nếu
một CSDL có một bảng được gọi là orders, chương trình của chúng ta sẽ có
một lớp được đặt tên là Order. Tuy nhiên nó không giống hầu hết các thư

viện ORM chuẩn bởi cách nó được cấu hình. Bằng cách sử dụng bộ mặc

10


định nhạy bén, Active Record làm giảm tải lượng cấu hình mà nhà phát triển
bình thường sẽ phải thực hiện.
 Sự hỗ trợ rất lớn khi phát triển trang web với Ajax:
 Các website truyền thống về bản chất là gửi dữ liệu từ các form, được nhập
bởi người sử dụng, tới một web services. Web services sẽ trả lời bằng việc
gửi về một trang web mới. Do web services phải tạo ra một trang web mới
mỗi lần như vậy nên các ứng dụng chạy chậm hơn.
 Trong khi đó, với các website sử dụng Ajax có thể gửi các yêu cầu tới web
services để nhận về chỉ những dữ liệu cần thiết, thông qua việc dùng SOAP
hoặc một vài web services dựa trên nền tảng XML cục bộ khác. Trên máy
Client, JavaScript sẽ xử lý các đáp ứng của máy chủ. Kết quả là trang web
được hiển thị nhanh hơn vì lượng dữ liệu trao đổi giữa máy chủ và trình
duyệt web giảm đi rất nhiều. Thời gian xử lý của web services cũng vì thế
mà được giảm theo vì phần lớn thời gian xử lý được thực hiện trên máy
khách của người dùng.
 Việc Ajax có mặt trong Rails có phần bắt nguồn từ lịch sử của Rails. Rails
ban đầu được xây dựng để phát triển các ứng dụng sản phẩm của công ty
37signals, khi đó các nhà phát triển cần sử dụng các chức năng Ajax. Việc
viết Ajax trực tiếp bằng Javascript gây ra nhiều khó khăn, mà mất nhiều
công sức. Trong quá trình đó, công ty đã quyết định xây dựng Ajax trong
Rails, các hàm chức năng của Ajax được đưa vào trong framework. Kết quả
là Ruby on Rails trở thành một trong những framework đầu tiên đưa công
nghệ Ajax vào framework.
 Có hai khía cạnh trong vấn đề Ajax/Rails. Đầu tiên đó là framework Rails
đã sử dụng cả hai framework Javascript là Prototype và script.aculo.us, gói

chúng lại trong Rails. Từ đây Rails xây dựng các helper, cái mà cho phép
chúng ta dễ dàng sử dụng công nghệ Ajax mà không cần phải gõ Javascript.
Thay vào đó là những câu lệnh đơn giản, dễ nhớ sẽ tự động sinh ra javascript
khi chạy ứng dụng.

11


CHƯƠNG III: THIẾT KẾ VÀ CÀI ĐẶT GIẢI PHÁP
3.1

Thiết kế hệ thống
3.1.1

Các thực thể chính

 Bảng condo: Chung cư
 name: Tên chung cư.
 description: Thông tin mô tả.
 image_path: Hình ảnh đại diện.
 Bảng users: Người dùng










username: Biệt danh.
email: email (dùng để đăng nhập).
password: Mật khẩu.
avatar_path: Hình đại diện.
name: Họ và tên người dùng.
phone: Số điện thoại.
city: Tỉnh thành.
country: Quốc gia.

 Bảng bookings: Danh sách đăng ký sử dụng dịch vụ





date_use: Ngày sử dụng.
date_expiry: Ngày hết hạn thanh toán phí.
data: Lưu thông tin (người đặt, phí thuê, đặt cọc, thời gian)
status: Chấp nhận yêu cầu hay không.

 Bảng facilities: Danh sách các dịch vụ







name: Tên dịch vụ.
booking_price: Phí thuê.

deposit_price: Đặt cọc.
note: Lưu ý.
imag_path: Hình ảnh của dịch vụ.
actived: Trạng thái của dịch vụ (Đang hoạt động, hay).

 Bảng facility_categories: Nhóm dịch vụ
 name: Tên nhóm dịch vụ
 Bảng time_slots: Danh sách thời gian
 slot_start: Thời gian bắt đầu.
 slot_end: Thời gian kết thúc.

12


 Bảng events: Sự kiện







name: Tên sự kiện.
date: Ngày áp dụng.
time_start, time_end: Thời gian áp dụng.
location: Nơi diễn ra sự kiện.
organiser: Người tổ chức.
description: Mô tả chi tiết.

 Bảng event_images: Hình ảnh của sự kiện

 image_path: Hình ảnh.
 Bảng bulletins: Thông báo
 title: Tiêu đề thông báo.
 content: Nội dung thông báo.
 image_path: Hình ảnh thông báo
 Bảng form_categories: Nhóm biểu mẫu
 name: Tên nhóm biểu mẫu.
 Bảng forms: Biểu mẫu
 title: Tên biểu mẫu.
 file_path: File biểu mẫu.
 Bảng guard_houses: Nhà bảo vệ
 phone: Số điện thoại.
 photo_path: Hình ảnh nhà bảo vệ.
 map_path: Sơ đồ đi đến nhà bảo vệ.
 Bảng guard_images: Hình ảnh bảo vệ
 name: Tên bảo vệ.
 image_path: Hình ảnh.
 Bảng house_rules: Quy định
 title: Tiêu đề.
 content Nội dung.
 Bảng privileges: Khuyến mãi





title: Tiêu đề khuyến mãi.
date: Ngày áp dụng.
date_detail: Thời gian cụ thể.
image_path: Hình ảnh khuyến mãi.


Mặc định đối với tất cả các bảng đều có 3 trường là: id: khóa tự tăng, created_at:
ngày tạo, updated_at: ngày update cuối cùng.

13


3.1.2

Mô hình CSDL quan hệ

Hình 3.1: Mô hình CSDL
Đây là mô hình CSDL mô tả mối quan hệ giữa các chức năng của hệ thống, mặc
định tất cả các bảng đều có 3 trường id, created_at, updated_at. Về việc tương tác với
CSDL thì Rails đã hỗ trợ người dùng tạo bảng tạo quan hệ thông qua ActiveRecord
trong Rails, do đó người lập trình không cần tạo CSDL trước, mà chỉ cần khai báo
thông tin và quan hệ giữa các bảng.

14


×