Home » Ruby Tutorial Box » [Blogging Rails – 02] MVC in Rails

[Blogging Rails – 02] MVC in Rails


 

Để tiếp tục cho loạt bài về rails tutorial, hôm nay mình muốn chia sẻ với mọi người về khái niệm MVC trong Rails.

Như trong bài trước đã có viết, sau khi chạy câu lệnh rails new trong console, bạn sẽ thấy có rất nhiều folder được sinh ra. Nhưng trong bài viết này sẽ chỉ đề cập tới folder app. Bạn sẽ thấy trong đó có các sub folder như: models, views, controllers. Đó chính là chủ đề của bài viết này.

MVC là từ viết tắt của khái niệm Model – View – Controller. Các công việc của bạn trong một dự án Rails sẽ được chia thành ba phần riêng biệt, nhưng lại có mối tương quan rất mật thiết với nhau. Chúng chia phần giao diện người dùng (views) tách biệt với phần logic (controller) và database (model) của dự án.

Mình xin giải thích rõ hơn một chút về MVC

Model

Nếu bạn dùng cơ sở dữ liệu là relational database như mysql, sqltite3, posgre sql … Model sẽ là ActiveRecord. Còn nếu bạn sử dụng non-traditional database, ví dụ như mongo, thì bạn sẽ cần tìm hiểu về mongoid.

Tuy nhiên, dù là cơ sở dữ liệu nào, thì trong Model, bạn sẽ cần khai báo các validations (kiểm tra giá trị của trường), associations (các mối liên hệ giữa các model), … Trong Rails 3, bạn có thể khai báo các trường, nhưng trong Rails 4, việc khai báo các trường trong Model là không cần thiết.

View (ActionView)

Mọi kết nối tới ứng dụng của người dùng đều thông qua Views. Views là những gì sẽ hiện thị tới người dùng, được viết theo một format nhất định, với ruby đó là dạng ERB

Controller (ActionController)

Kết nối với Model, lấy cơ sở dữ liệu và tổ chức, xử lý cơ sở dữ liệu để trả ra trên View và hiển thị cho người dùng thấy.

Mọi người có thể mường tượng cách thức mà Rails app tương tác với người dùng theo hình vẽ sau:

MVC Diagram (image from ruby.railstutorial.org)


  1. Người dùng tương tác lên trình duyệt (firefox) –> Trình duyệt gửi request lấy link (/users)
  2. Ứng dụng Rails thông qua routers, request tới action index trong controller.
  3. Controller sẽ gửi yêu cầu tới Model để lấy dữ liệu
  4. Model sẽ lấy toàn bộ users trong cơ sở dữ liệu ra
  5. Model trả dữ liệu cho controller
  6. Controller sẽ đưa dữ liệu về users (bằng biến @users ) tới Views
  7. Views sử dụng format erb để lấy users và hiển thị trên file html
  8. Controller trả file html cho browser và hiển thị lên người dùng
Tuy nhìn thì có vẻ phức tạp, cồng kềnh lắm bước, nhưng thực ra những hành động này được xử lý rất nhanh (mặc dù còn tùy thuộc vào code của bạn 🙂 ).

Có thể bạn chưa hiểu rõ, những hãy yên tâm, những bài viết sau mình sẽ còn giải thích thêm về cái này trong quá trình làm. Hi vọng bài viết này giúp bạn hình dung rõ hơn về MVC.

Có một công cụ Rails hỗ trợ người dùng, đó là Scaffolding. Bạn có thể tự động sinh ra Model, View, Controllers sử dụng rails scaffold . Tuy nhiên, mình sẽ không giới thiệu ở đây. Trong quá trình làm mình có sử dụng tới chúng, và sẽ giải thích thêm về scaffolding trong rails. Bạn chỉ cần nhớ rằng Rails rất nhanh, và mạnh mẽ 🙂