Last active
November 9, 2017 01:58
-
-
Save kieetnvt/e69b1643d4a686bd53cd073da1bf38ba to your computer and use it in GitHub Desktop.
Ruby on Rails code guide style
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Config chung | |
Initializer | |
- Để các code khởi tạo trong thư mục config/initializers. Các đoạn code để trong thư mục này sẽ tự động execute khi server khởi động. | |
- Để các code khởi tạo thành các file riêng theo gem. Ví dụ: carrierwave.rb, devise.rb… | |
Global variable | |
- Các biến global như email dùng để gửi mail, hostname, … nên để trong các file config/enviroments/development.rb,config/enviroments/production.rb | |
- Trường hợp các biến dùng cho tất cả môi trường thì định nghĩa trong file application.rb | |
- Có thể dùng gem figaro | |
Routing and links | |
Routes.rb | |
- Không dùng match, cần chỉ cụ thể phương thức như post, get, put, … | |
- Dùng link_to "Display text, name_route_url thay cho link_to "Display text, controller: 'name', action: 'route'. | |
Models | |
Migration file | |
- Đặt timestamps ngay sau cột Primary Key | |
- Đặt index trên các cột Foreign Key | |
ActiveRecord | |
- Hạn chế đổi các giá trị mặc định của Model như tên bảng, tên cột khóa chính(id). | |
- Thứ tự các phần trong một model: | |
- default_scope, scope. | |
- Các khai báo hằng số. | |
- attr_accessor, attr_accessible, … | |
- Các hàm quan hệ(has_many, belongs_to, has_one, …). | |
- Các hàm validates. | |
- Các hàm callback(before_save, …). | |
- Các hàm macro của các gem(như các macro của Devise). | |
- Nên sử dụng has_many :through thay cho has_and_belongs_to_many | |
- Đặt các custom validator trong thư mục app/validators | |
- Nên dùng name scope | |
- Chú ý hàm update_attribute không check validation, hàm update_attributes có check validation | |
- Khi gọi hàm ActiveRecord#count phải gắn :select => 'id'. | |
- Dùng hàm validates thay cho các hàm validates_presence_of, … Ví dụ: | |
snippet.ruby | |
# bad | |
validates_presence_of :email | |
# good | |
validates :email, presence: true | |
Views | |
Qui tắc chung | |
- Không gọi model trực tiếp từ view. | |
- Với các thao tác format phức tạp, nên để trong helper(hoặc decorator tùy project). | |
- Các đoạn view hay dùng nên tạo partial views. | |
- Nếu render partial view cho một mảng các object nên dùng option: collection thay cho vòng lăp | |
- Nên dùng thẻ <%- -%> | |
- Nếu chèn url, dùng thẻ url_for, không dùng đường dẫn. | |
- Dùng đường dẫn tuyệt đối khi gọi partial view. Ví dụ | |
snippet.ruby | |
<%=render :partial => "/jobs/show", :locals => {:job => @job} %> | |
Assets | |
- Thư mục app/assets để lưu các custom css, javascript. | |
- Thư mục lib/assets để lưu các thư viện css, javascript hay dùng giữa các project. | |
- Thư mục vendor/assets để lưu các thư viện javascript như jquery, bootstrap, … | |
- Nên sử dụng các phiên bản gem của các thư viện js, css như: jquery-rails, jquery-ui-rails, bootstrap-sass, zurb-foundation | |
Mailer | |
- Đặt tên mailer theo format SomethingMailer | |
- Nên tạo 2 phiên bản text và html | |
- Hạn chế thực gọi hàm gửi mail trực tiếp trong controller(gây delay khi generate view). Nên dùng các gem tạo backgound job như Sidekiq | |
Bundle | |
- Đặt gem theo group tùy vào môi trường. | |
- Nên kèm theo phiên bản. | |
Gem | |
Gem chuẩn dùng trong các dự án JP/VN | |
- Recommended gems list | |
Gem thường dùng | |
- active_admin: tạo giao diện admin, quản lý tìm kiếm, thêm xóa sửa database. | |
- better_errors: hiện thông báo lỗi chi tiết, dễ nhìn hơn. Nên cài kèm theo gem binding_of_caller. | |
- bullet: Kiểm tra các query, thông báo khi có vấn đề (N + 1) query | |
- cancan: authorization gem. | |
- capybara: giúp test view. | |
- carrierwave: gem hỗ trợ upload file. Nhiều chức năng và dễ customize hơn paperclip. | |
- cucumber: integrated test. | |
- devemise: authentication gem. | |
- factory_girl: tạo data mẫu dùng để test. | |
- ffaker: tạo dummy data. | |
- haml: Haml gem. | |
- kaminari: giúp paging. Dễ customize hơn will_paginate. | |
- Rspec: unit test. | |
- sidekiq: tạo background job. | |
- simple_form: enhance default form_for. | |
Gem không nên dùng | |
- rmagick: tốn bộ nhớ. Nên dùng mini_magick để thay thế. | |
- autotest : tự động chạy test. Nên dùng guard và watchr. | |
- rcov: Không tương thích với ruby 1.9. Dùng simplecov thay thế. | |
- therubyracer: tốn nhiều bộ nhớ(Đặc biệt ở môi trường production). Nên dùng node.js. Tham khảo tại install node.js Heroku |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment