Ruby on Rails (RoR) là một web framework được viết bằng ngôn ngữ Ruby và tất cả các ứng dụng trong Rails sẽ được viết bằng Ruby. Ruby on Rails được tạo ra để hỗ trợ các lập trình viên việc phát triển các phần mềm nền web một cách nhanh nhất có thể.Rails framework tận dụng các đặc điểm của ngôn ngữ Ruby. Yukishiro Matzumoto viết ra ngôn ngữ này vào năm 1995, nó khá giống với các ngôn ngữ thông dịch khác như Perl, Eiffel, Python…. Ruby là ngôn ngữ script, định nghĩa kiểu động và là một ngôn ngữ hướng đối tượng, nó được thiết kế với một cú pháp trong sáng, tạo cảm giác dễ đọc, và viết code ngắn gọn nhất có thể đối người dùng, ví dụ như nó không cần dấu chấm phẩy khi kết thúc câu lệnh, không cần các dấu ngoặc đơn khi khai báo các phương thức, có những đoạn code thậm chí được viết giống như việc chúng ta viết tiếng anh vậy.
Trang 1Ruby On Rails
ROR
1
Trang 2Phần 1: tóm tắt
Giới thiệu
Đặc trưng của ROR
Định tuyến (routing) trong ROR
Trang 3Giới thiệu ror
Là một framework được viết bằng Ruby
Cho phép tạo ra web app một cách nhanh nhất có thể bằng cách tận dụng các
đặc điểm của ngôn ngữ Ruby
Trang 4Tại sao gọi là ruby on rails?
Phần ngôn ngữ Ruby
Phần Framework Rails bao gồm nhiều thư viện liên kết
ROR được ra đời để trả lời câu hỏi về khó khăn trong việc phát triển và bảo trì
ứng dụng của lập trình viên
Trang 9Đặc trưng của ror
DRY – “Don’t Repeat Yourself” – không khuyến khích viết lại mã
COC – Convention Over Configuration – tạo ra những quy ước về những gì sẽ
làm thay vì phải tự làm từng thứ một qua những file cấu hình
Trang 10Đặc trưng của ror
Tạo ra các giả định về những thứ mà nhà phát triển muốn bắt đầu
Độc đoán, giả định đây là cách tốt nhất để làm việc
Cho phép viết ít mã hơn
Tiện lợi cho phát triển những ứng dụng lớn
Trang 11Ví dụ
Rails định nghĩa sẵn các thư mục stylesheets, images, JavaScript
Tự động tạo các thư mục, các file cần thiết, database
Trang 13Cấu trúc thư mục ứng dụng
File/Folder Purpose
app/ Chứa các controller, models, views, helpers, mailer và assets của ứng dụng
script/ Chứa rails script để khởi động ứng dụng
config/ Cấu hình routes, database
db/ Chứa các database chema, migration hiện tại
Gemfile
Gemfile.lock
Xác định những gem cần thiết cho ứng dụng Được sử dụng bởi Bundler gem
Trang 14Cấu trúc thư mục ứng dụng
File/Folder Purpose
public/ Chứa các file tĩnh để hiển thị khi gặp lỗi
Rakefile Xác định vị trí và nạp các nhiệm vụ có thể chạy từ cmd.
README.rdoc Giới thiệu, cách cài đặt ứng dụng của bạn
Trang 15Model – View – Controller
Model: được sử dụng để tương tác với các thành phần tương ứng với chúng
trong database và validate dữ liệu
View: hiển thị giao diện qua các file HTML nhúng cùng với các đoạn mã Ruby
(.html.erb)
Controller: tương tác với model và view, xử lý các request đến từ browser, sau
đó tương tác với model để lấy dữ liệu và trả về cho view để hiển thị thông tin
Trang 16Model – View – Controller
Trang 17Định tuyến trong ror
Định nghĩa trong file routes.rb
Một định tuyến cung cấp ánh xạ giữa các HTTP verbs (GET, POST, PATCH/PUT,
DELETE) và các URL đến các hành động (trong controller)
Theo quy ước mỗi hành động cũng ánh xạ đến từng CRUD (CREATE, READ,
UPDATE, DELETE) trong database
Trang 18Định tuyến trong ror
Ví dụ:
resources :posts trong routes.rb tạo ra 7 tuyến đường khác nhau trong ứng
dụng, tất cả đều ánh xạ tới Posts Controller
Nếu Rails không tìm thấy posts/new template, nó sẽ gọi một template có tên
là application/new (Vì PostsController kế thừa từ ApplicationController)
Trang 19Định tuyến trong ror
HTTP Verb Path Action Used for
GET /posts/:id/edit edit Trả về HTML form để edit
PATCH/PUT /posts/:id update Update một post
Trang 20Path và url helper
Để tạo ra một route cần dùng đến một số helper
Đối với resource :posts
Trang 21Các tài nguyên lồng nhau
Có những tài nguyên là con của tài nguyên khác.
Trang 22Các tài nguyên lồng nhau
Đối với các route lồng nhau, bạn có thể khai báo:
Trang 23HTTP Verb Path Action Used for
GET /posts/:post_id/comments index Hiển thị danh sách comment
GET /posts/:post_id/comments/new new Trả về HTML form để tạo
comment
POST /posts/:post_id/comments create Tạo comment mới
GET /posts/:post_id/comments/:id show Hiển thị một comment
GET /posts/:post_id/comments/:id/edit edit Trả về HTML form để edit
Trang 24Tạo path và url từ object
Rails có thể tạo đường dẫn và URL từ một mảng các tham số Ví dụ, bạn có
route sau:
resources :posts do
resources :comments
end
Trang 25Tạo path và url từ object
Khi sử dụng post_comment_path, bạn có thể truyền vào một instance của Post
và Comment thay vì ID:
<%= link_to ‘Comment details’, post_comment_path(@post, @comment) %>
Trang 26Tạo path và url từ object
Bạn cũng có thể sử dụng url_for với một bộ object, và Rails sẽ tự động xác
định bạn muốn route nào:
<%= link_to ‘Comment details’ , url_for([@post, @comment]) %>
Trong trường hợp này Rails sẽ sử dụng post_comment_path helper
Trang 27Tạo path và url từ object
Đối với những hành động khác, chỉ cần thêm action làm phần tử đầu tiên của
mảng:
<%= link_to ‘Edit comment’, [:edit, @post, @comment] %>
Trang 28Phần 2 – tóm tắt
Active Record là gì?
Console Rails
Cơ sở dữ liệu trong Rails
Quản lý Relation với Active Record
Trang 29Active Record là gì?
Là thành phần cơ bản, quan trọng của Rails
Điều khiển sự tương tác giữa các ứng dụng
Thuộc tầng Model trong mô hình MVC
Đại diện cho Business Data và Logic
Đam bảo việc truy cập dữ liệu logic
Cho phép đọc ghi dữ liệu
Thao tác với DB không cần thông qua SQL
Trang 30Object – Relational Mapping (ORM)
ORM là cơ chế cho phép bạn xây dựng 1 ứng dụng mà thao tác
trên table trong database được đóng gói lại trong 1 business
class và không phải quan tâm nhiều đến việc viết query cho
mỗi lần truy xuất DB
Trang 31ORM (tt)
Thao tác truy cập, xử lý database một cách dễ dàng và nhanh chóng bạn
không cần phải sử dụng SQL, mà chỉ cần sử dụng các API đơn giản
Tự động gen ra các câu lệnh SQL như Insert, Update, Delete, Select
Trang 32Active Record = ORM Framework
Active Record cung cấp cho chúng ta các cơ chế
Đại diện cho model và dữ liệu của chúng
Đại diện cho sự liên kết giữa các model
Đại diện cho các phân cấp kế thừa thông qua mô hình quan hệ
Validate model trước khi chúng tồn tại trong DB
Thực hiện các hoạt động DB một cách hướng đối tượng
Trang 33Quy ước cấu hình trong active record
Quy ước đặt tên:
Tên bảng là dạng số nhiều của tên model
Tên model gồm nhiều từ tên bảng chứa các từ phân tách nhau bởi dấu gạch dưới
Trang 34Quy ước cấu hình trong active record
Quy ước lược đồ (schema)
Primary Key: cột số nguyên ID
Foreign Key: đặt theo mô hình, dùng để liên kết các bảng
Create_at: tự động thiết lập ngày và thời gian hiện tại khi ghi bản ghi lần đầu
Update_at: tự động thiết lập ngày và thời gian hiện tại khi ghi bản ghi được cập nhật
Trang 35Rails console
Là một tiện ích đi kèm với mỗi ứng dụng Rails, cho phép làm việc với các
model được liên kết với DB
Khi khởi động Console, Rails thực hiện
Rails liên kết với DB
Rails tải các class Active Record trong app/model
Rails cho phép thao tác với model
Trang 37Cơ sở dữ liệu trong Rails
Column
Các khái niệm liên quan đến name, type, primary, giống như ngôn ngữ
SQL
Accessors
Để thao tác với các cột trong 1 DB, ta chỉ cần gọi accessor như
photo.filename Với chức năng này, Rails sẽ giúp thao tác tìm kiếm CSDL
dễ dàng hơn
ID
Thuộc tính đặc biệt được Active Record tạo ra
Trang 38Cơ sở dữ liệu trong Rails(tt)
Method
Method Active Record
Find_by_<tên cột> Active Record sẽ thêm 1 method vào trong mỗi class được sử
dụng đối với mỗi cột trong CSDL
Trang 39 Active Record cho phép kiểm tra tính hợp lệ của dữ liệu đầu vào.
Ví dụ:
class Product < ActiveRecord::Base
attr_accessible :description, :image_url, :price, :title
validates :title, :description, :image_url, :presence => true
validates :price, :numericality => {:greater_than_or_equal_to => 0.01}
validates :title, :uniqueness => true validates :image_url, :format => {
:with => %r{\.(gif|jpg|png)$}i, :message => 'must be a URL for GIF, JPG or PNG image.' }
end
Trang 40Quản lý Relation với Active Record
Active Record lấy một phần của ngôn ngữ Ruby và sử dụng cách đặt tên theo
chuẩn làm đơn giản hóa việc tương tác giữa các table với nhau trong CSDL
Cú pháp sử dụng có dạng:
relation :asociation :option1 => value, :option2 => value
Trang 41Quản lý Relation với Active Record
• Relation: một method được xác định bởi Active Record để tạo relation giữa
join: nối các bảng thông qua từ khóa through
• Association(s): được hiểu như một ký hiệu đặc biệt dành cho mỗi relation
được tạo
• Option: cũng như mọi method được sử dụng trong Ruby, mỗi relation đều có
thể có một hoặc nhiều option
Trang 42CRUD – đọc và ghi dữ liệu
Active Record tự động tạo các phương thức cho phép ứng dụng có thể đọc và
thao tác với dữ liệu trong các bảng
Create
Read
Update
Delete
Trang 43CRUD (tt)
Cho một model User với các thuộc tính name và occupation
Create
user = User.create(name: "David", occupation: "Code Artist")
hoặc sử dụng phương thức new:
user = User.new
user.name = "David"
user.occupation = "Code Artist"
user.save
Trang 44CRUD (tt)
Read
users = User.all
user = User.first
david = User.find_by(name: 'David')
created_at in reverse chronological order
users = User.where(name: 'David', occupation: 'Code Artist').order('created_at DESC')
Trang 46Active Record Migrations
Migrations là một tính năng của Active Record cho phép bạn phát triển các
giản đồ cơ sở dữ liệu theo thời gian Thay vì sửa đổi trong lược đồ quan hệ
SQL, Migrations cho phép sử dụng dễ dàng Ruby DSL để mô sự thay đổi trên
các bảng
Cú pháp:
$ rails generate migration <tên bảng> [<cột 1> :<kiểu 1> <cột 2> :<kiểu 2> ]
Trang 47Active Record Migrations
Ví dụ:
$ rails generate migration posts title :string content :text
Hoặc có thể truy cập file db/migrate/*create_posts.rb và sửa nội dung:
class CreatePosts < ActiveRecord::Migration
Trang 48Part 3 – demo blog
Trang 49Phần 4 – đánh giá
Điểm yếu
Kết luận
Trang 51Điểm yếu
Điểm yếu của Ruby: ngôn ngữ thông dịch
Chạy chậm hơn các ngôn ngữ biên dịch khác như Java, C++/C
Vấn đề hiệu năng:
Không tối ưu hóa tốc độ
Không hỗ trợ tốt về thread
Quản lý bộ nhớ, thu gom rác
Khó khăn trong phát triển tiếp một ứng dụng có sẵn
Trang 52Kết luận
ROR thích hợp cho việc phát triển những ứng dụng vừa và nhỏ, yêu cầu thời
gian phát triển ngắn, dễ bảo trì, dễ đọc hiểu, không đòi hỏi hiệu năng cao
Trang 53Tham khảo
Agile Web Development with Rails Fourth Edition
The Ruby Programming Language – O’ Relly
https://www.ruby-lang.org/en/about/