Skip to content

Instantly share code, notes, and snippets.

@kieetnvt
Last active November 9, 2017 01:58
Show Gist options
  • Save kieetnvt/e69b1643d4a686bd53cd073da1bf38ba to your computer and use it in GitHub Desktop.
Save kieetnvt/e69b1643d4a686bd53cd073da1bf38ba to your computer and use it in GitHub Desktop.
Ruby on Rails code guide style
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