Tạo ứng dụng Rails đầu tiên


Ở bài trước chúng ta đã settup môi trường để làm việc rồi,hôm nay mình sẽ hướng dẫn các bạn cách tạo một website sử dụng rails nhé.

1.Tạo và chạy website đơn giản
Để tạo website sử dụng rails các bạn mở teminal lên và chạy lệnh theo cấu trúc
rails new <tên app>
ví dụ:

  rails new thanos  


Cùng xem xét ứng dụng của chúng ta có gì nhé

Hình trên là cấu trúc thư mục app của chúng ta.Mình giải thích một chút về các thư mục trong app nhé
+,Git
Thư mục git là để quản lý source của mình,các bạn có thể tìm hiểu về github và xem nó sử dụng để làm gì?nói nôm na thằng git nó giúp mình quản lý đống code của mình,mỗi ngày code xong chúng ta vứt lên nhờ anh git giữ hộ,khi mà muốn dùng hoặc chia sẻ với người khác chỉ cần vứt link địa chỉ của a git cho thằng đó là đc.Nói chung mình sẽ viết một bài riêng về git các bạn có thể tham khảo tại đây.

+,app
Đây là thư mục gốc của ứng dụng và phần lớn code của các bạn sẽ được lưu vào thư mục này.Rails là một MVC Framework,nghĩa là ứng dụng được chia thành các thành phần theo mục đích của nó,Model,View,Controller.3 thành phần này đều nằm trong thư mục app của chúng ta.

+,app/assets
Thư mục này chứa các file tĩnh cần thiết cho phía frontend như file js,css.Chúng được nhóm vào các thư mục con chứa trong thư mục này.Theo mình biết thì thư mục này chỉ nên chứa các file js,css của các bạn tự viết,còn các thư viện của bên thứ 3 nên lưu vào thư mục vendor phía dưới.Mình thì không có thói quen lưu thư viện bên thứ 3 vào vendor nên mình cứ ném hết mấy cái thư viện như jquery... vào thư mục app/assets,các bạn đừng cười nhé. ^_^

+,app/assets/images
Tất cả ảnh cần thiết của ứng dụng chúng ta nên được ném vào thư mục này.Khi ném ảnh vào thư mục này thì ảnh của các các bạn luôn sẵn sàng ở "View" nếu các bạn muốn sử dụng chỉ cần gọi thẻ giống như thế này image_tag("name_image.png").Chúng ta không cần sử dụng đường dẫn tương đối hoặc tuyệt đối cho ảnh,nếu các bạn muốn sử dụng đường dẫn tương đối hay tuyệt đối thì vẫn dùng như bình thường nhé.Rails chỉ thêm một phương pháp để truy suất ảnh dễ dàng hơn thôi.

+,app/assets/javascripts
Thư mục này dùng để chứa các file javascript.Có một quy tắc để đặt tên file js cho mỗi controller.ví dụ:có một controller tên là book_controller.rb,thì tên của file js của view sử controller book sẽ là book.js

+,app/assets/javascripts/application.js
File được tạo khi tạo project rails.Nó là nơi khai báo các file javascript cần thiết của project,có nghĩa là bất kỳ file js nào muốn được sử dụng trong  project cũng cần được khai báo ở file này.Rails sử dụng asset_pipelin để biên dịch cũng như phân phối tài nguyên.Không nên tạo các function js trong file này,tốt nhất file này chỉ dùng để khai báo các file js khác

+,app/assets/stylesheets
Nơi chứa các file css tương tự như thư mục javascripts,quy tắc đặt tên file cũng tương tự phần javascripts phía trên nhé.

+,app/assets/stylesheets/application.css
Tương tự như file application.js phía trên nhé

+,app/controllers
Đây là nơi chứa các file controller.Controllers có chức năng điều phối hoạt động của view và model.Quy tắc đặt tên controller đó là tên số nhiều của model + "_controller.rb".Ví dụ controller của model Book sẽ là books_controller.rb đây được gọi quy tắc đặt tên snake_case.Cũng như thế,controller class sẽ có quy tắc đặt tên theo CamelCase kiểu như thế này BooksController
Các bạn có thể tạo controller bằng tay hoặc sinh tự động bằng lệnh
rails generate controller controller_name action1 action
Mình thì thích tạo bằng tay hơn vì sẽ hiểu được code của mình hơn :D

+,app/controllers/application_controller.rb
Đây là controller chính và tất cả các controller khác đếu kế thừa.Các method trong ApplicationController luôn sẵn sàng trong các controller khác(vì được kế thừa mà).Controller này lại được kế thừa từ ActionController::Base.

+,app/controllers/concerns
Đây là một thư mục chứa các module bao gồm các method được sử dụng cho nhiều class hay module include chúng.Nói đơn giản nếu chúng ta viết controller mà có quả nhiều function trùng nhau,có thể tách chúng ra một module riêng,sau đó controller nào cần sử dụng các hàm đó thì chỉ cần include module đấy vào để sử dụng các hàm đó.

+,app/helpers
Đây là nơi chứa tất cả các helper function dành cho view.Helper được tạo ra để tối ưu code,ví dụ như bạn có thao tác định dạng kiểu thời gian theo ý mình và muốn áp dụng nó cho toàn project thì chỉ cần viết một helper và include nó vào controller chứa view.Việc còn lại là sử dụng hàm đó ở phần view,ví dụ minh họa nhé

module FormattedTimeHelper
  def format_time(time, format=:long, blank_message="&nbsp;")
    time.blank? ? blank_message : time.to_s(format)
  end
end
ở controller chỉ cần chỉ định helper mình cần

class EventsController < ActionController::Base
  helper FormattedTimeHelper
  def index
    @events = Event.all
  end
end
ở view có thể thoải mái sử dụng hàm format_time ^_^

<% @events.each do |event| -%>
  <p>
    <%= format_time(event.time, :short, "N/A") %> | <%= event.name %>
  </p>
<% end -%>
ví dụ minh họa mình tham khảo ở đây

+,app/helpers/application_helper.rb
Đây là một helper được viết sẵn các bạn có thể viết các function vào đây hoặc viết riêng một helper của các bạn nếu muốn.Vì khi sử dụng các bạn sẽ phải khai báo helper bằng cách include helper_name.

+app/mailers.
Bao gồm các template mẫu dùng cho việc gửi email

+,app/models.
Đây là nơi chứa của các model.Mặc định sẽ được kế thừa từ lớp ApplicationRecord < ActiveRecord::Base trong rails lớp ActiveRecord đóng vai trò trung gian để kết nối ứng dụng Rails với Database do đó các tập tin model còn đóng vai trò kết nối với Database để lưu trữ và truy vấn dữ liệu.
Các file model bản chất là các file ruby nên có phần mở rộng .rb

+,Views.
views: chứa các tập tin views được sử dụng bởi controller để hiển thị nội dung web cho người dùng.
Các tập tin views khi được sinh ra mặc định sẽ có phần mở rộng là .html.erb

+,Thư mục bin.
Thư mục này bao gồm các đoạn mã script dùng để khởi động ứng dụng rails hoặc dùng để thiết lập deloy ứng dụng

+,Thư mục config.
Thư mục này chứa các tập tin liên quan đến việc cấu hình của ứng dụng Rails.
Tập tin database.yml là tập tin dùng để cấu hình kết nối tới database của ứng dụng rails. Ở đây sẽ khai báo hệ quản trị csdl nào sẽ được sẽ dụng (SQL Server, My SQL, SQLite, Oracle,...)và các thông số cần thiết để truy cập (username, password, database name).

Tập tin routes.rb đây là tập tin mà chúng ta cần lưu ý nhất trong thư mục này vì sau này các bạn sẽ làm việc với nó khá nhiều. Tập tin này là nơi để khai báo các đường dẫn đến các file controller/action khi bạn gọi request ở phía client.

Ngoài ra thư mục này còn chứa các thư mục con khác :

environments là nơi chứa các tập tin cấu hình cho từng môi trường phát triển developement, production hay test,...

initializers là nơi chứa các tập tin cho việc khởi tạo ban đầu của ứng dụng hay của các gem,...

locales là nơi chứa các tập tin phục vụ cho việc hiển thị đa ngôn ngữ của ứng dụng (I18n)

+,Thư mục db

Thư mục này chứa các tập tin migrations dùng để tạo cấu trúc schema cho database.

Tập tin seeds là nơi để nhà phát triển viết các đoạn mã script để cập nhật dữ liệu cho database.

Để gọi thực thi file này ta thực hiện lệnh
 rake db:seed  

+,Thư mục lib
Bao gồm các thư viện được dùng trong ứng dụng. Thông thường các thư viện này được viết bởi chính những lập trình viên tham gia vào viết ứng dụng. Các thư viện của bên thứ 3 thường không được đặt ở trong thư mục này mà được đặt ở thư mục Vendor

Thư mục này còn chức thư mục con là tasks đây là thư mục dùng để chứa các rake task trong ứng dụng rails

+,Thư mục log
Chứa các bản ghi log các thông tin trong quá trình cài đặt, khởi động, chạy hay ngừng ứng dụng.

+,Thư mục public
Nội dung của các tập tin đặt trong thư mục này sẽ có thể được tải trực tiếp về trình duyệt. Như các file hình ảnh, âm thanh,...

+,Thư mục test
Thư mục này chức các tập tin và thư mục con phục vụ cho việc test ứng dụng : testcase, unit test, intergration test,...

+,Tập tin Gemfile và Gemfile.lock
Gemfile là một trong những tập tin quan trọng nhất trong Rails mà chúng ta làm việc thường xuyên nhất.

Rails là một framework được xây dựng với mục đích hỗ trợ nhà phát triển xây dựng ứng dụng web nhanh nhất do đó việc tích hợp các thư viện hỗ trợ là một trong những chức năng đặc trưng của Rails.

Các thư viện hỗ trợ được tích hợp vào ứng dụng Rails thông qua các gem, các bạn có thể tìm hiểu thêm về Ruby gem ở đây https://rubygems.org/

Chỉ cần khai báo tên gem vào trong tập tin Gemfile như bên dưới và chạy lệnh




 bundle install  

Là gem đó đã được tích hợp vào ứng dụng Rails.

+,Tập tin Rakefile
Tập tin Rakefile được Rails sử dụng để tìm kiếm các tác vụ mà chúng có thể được thực thi trên cửa sổ dòng lệnh thông qua rake. Bạn không nên định nghĩa trực tiếp các tác vụ này trong Rakefile mà việc định nghĩa các tác vụ này được thực hiện thông qua các tập tin trong thư mục lib/tasks.

Oke vậy là mình vừa trình bày tổng quan về app rails.Ở các bài sau mình sẽ đi vào chi tiết xây dựng các chức năng.Mời các bạn đón đọc.:D

Nhận xét

Bài đăng phổ biến từ blog này

Cài đặt SSL cho website sử dụng certbot

Xây dựng một hệ thống comment real-time hoặc chat đơn giản sử dụng Pusher

CÁC BÀI TẬP SQL CƠ BẢN - PART 1

Xây dựng một hệ thống tracking hành vi người dùng (phần 1)

Xây dựng một hệ thống tracking hành vi người dùng (phần 2)

Enterprise architecture trên 1 tờ A4

Web caching (P2)

Bàn về async/await trong vòng lặp javascript

Web caching (P1)

Cài đặt môi trường để code website Rails