Skip to main content

Bài 4: Giới thiệu Rails và MVC

Rails Framework Overview

Ruby on Rails, thường được gọi tắt là Rails, là một web application framework mạnh mẽ được viết bằng Ruby. Rails tuân theo hai nguyên tắc cốt lõi: "Convention over Configuration" (CoC) và "Don't Repeat Yourself" (DRY).

Cài đặt Rails

gem install rails

Tạo ứng dụng Rails mới

rails new my_app
cd my_app

Model-View-Controller (MVC) Architecture

Rails sử dụng mô hình MVC để tổ chức code:

  • Model: Xử lý dữ liệu và logic nghiệp vụ
  • View: Hiển thị dữ liệu cho người dùng
  • Controller: Điều phối tương tác giữa Model và View

Model

Models trong Rails thường kế thừa từ ApplicationRecord:

# app/models/user.rb
class User < ApplicationRecord
validates :email, presence: true, uniqueness: true
has_many :posts
end

View

Views trong Rails sử dụng ERB (Embedded Ruby) mặc định:

<!-- app/views/users/index.html.erb -->
<h1>Users</h1>
<% @users.each do |user| %>
<p><%= user.name %> (<%= user.email %>)</p>
<% end %>

Controller

Controllers xử lý requests và chuẩn bị dữ liệu cho views:

# app/controllers/users_controller.rb
class UsersController < ApplicationController
def index
@users = User.all
end

def show
@user = User.find(params[:id])
end
end

Routing và RESTful Design

Rails sử dụng RESTful routing mặc định.

Định nghĩa Routes

# config/routes.rb
Rails.application.routes.draw do
resources :users do
resources :posts
end
end

Lệnh này tạo ra các RESTful routes cho users và posts.

Xem tất cả routes

rails routes

Custom Routes

get '/about', to: 'pages#about'

Active Record Basics

Active Record là ORM (Object-Relational Mapping) của Rails, cung cấp interface giữa models và database.

Tạo Model và Migration

rails generate model User name:string email:string
rails db:migrate

CRUD Operations

# Create
user = User.create(name: "John Doe", email: "john@example.com")

# Read
user = User.find(1)
users = User.where(name: "John Doe")

# Update
user.update(name: "Jane Doe")

# Destroy
user.destroy

Validations

class User < ApplicationRecord
validates :name, presence: true
validates :email, uniqueness: true, format: { with: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i }
end

Callbacks

class User < ApplicationRecord
before_save :normalize_email
after_create :send_welcome_email

private

def normalize_email
self.email = email.downcase
end

def send_welcome_email
UserMailer.welcome(self).deliver_later
end
end

Asset Pipeline và Webpacker

Rails cung cấp Asset Pipeline để quản lý static assets (CSS, JavaScript, images). Từ Rails 6, Webpacker được sử dụng mặc định cho JavaScript.

Asset Pipeline

# app/assets/stylesheets/application.css
/*
*= require_tree .
*= require_self
*/

Webpacker

rails webpacker:install
// app/javascript/packs/application.js
import 'core-js/stable'
import 'regenerator-runtime/runtime'

Tích hợp với Front-end Frameworks

Rails có thể tích hợp dễ dàng với các front-end frameworks như React, Vue, hoặc Angular.

Ví dụ với React

rails webpacker:install:react
# app/views/layouts/application.html.erb
<%= javascript_pack_tag 'application' %>
// app/javascript/components/HelloWorld.jsx
import React from 'react'

const HelloWorld = ({name}) => (
<div>Hello {name}!</div>
)

export default HelloWorld

Testing trong Rails

Rails cung cấp framework testing tích hợp.

Unit Testing

# test/models/user_test.rb
require 'test_helper'

class UserTest < ActiveSupport::TestCase
test "should not save user without email" do
user = User.new
assert_not user.save, "Saved the user without an email"
end
end

Integration Testing

# test/integration/user_flows_test.rb
require 'test_helper'

class UserFlowsTest < ActionDispatch::IntegrationTest
test "can see the welcome page" do
get "/"
assert_select "h1", "Welcome#index"
end
end

Kết luận

Ruby on Rails là một framework mạnh mẽ cho phát triển web nhanh chóng và hiệu quả. Với cấu trúc MVC rõ ràng, routing linh hoạt, và ORM mạnh mẽ, Rails cho phép các nhà phát triển tập trung vào logic kinh doanh thay vì chi tiết triển khai.

Trong thực tế, việc sử dụng Rails hiệu quả đòi hỏi hiểu biết sâu sắc về các quy ước và "magic" của framework. Tuy nhiên, khi được sử dụng đúng cách, Rails có thể giúp bạn xây dựng các ứng dụng web phức tạp một cách nhanh chóng và dễ bảo trì.

Trong các bài tiếp theo, chúng ta sẽ đi sâu hơn vào các khía cạnh cụ thể của Rails, bao gồm Active Record nâng cao, testing, và các kỹ thuật tối ưu hóa hiệu suất.