Skip to content

Instantly share code, notes, and snippets.

View tanhit243's full-sized avatar
💭
I may be slow to respond.

Vu Tuan Anh tanhit243

💭
I may be slow to respond.
View GitHub Profile
@tanhit243
tanhit243 / has_secure_token in rails
Created August 5, 2022 05:51
Hỗ trợ tạo đoạn token
https://api.rubyonrails.org/classes/ActiveRecord/SecureToken/ClassMethods.html
Tìm bản ghi duy nhất trong DB
- nếu không tìm thấy thì raise ActiveRecord::RecordNotFound
- nếu tìm thấy nhiều hơn một bản ghi thì raise ActiveRecord::SoleRecordExceeded
Chỉ định thứ tự theo các trường cụ thể
https://blog.kiprosh.com/rails-7-in_order_of-method-for-activerecord-and-enumerable/
@tanhit243
tanhit243 / rails http status codes
Created August 7, 2022 07:37 — forked from mlanett/rails http status codes
HTTP status code symbols for Rails
HTTP status code symbols for Rails
Thanks to Cody Fauser for this list of HTTP responce codes and their Ruby on Rails symbol mappings.
Status Code Symbol
1xx Informational
100 :continue
101 :switching_protocols
102 :processing
@tanhit243
tanhit243 / gist:ade17417bf5d360024c8b06561855678
Created September 11, 2022 15:35
Tìm kiếm route trong rails với route -g
:info_neon: Chuyên mục MIL - Monday I learn - 003
Số MIL-002 đã giới thiệu về một hàm mới họ *sole
Vì thấy mọi người hay dùng VS code nên chắc hẳn việc tìm route trong một dự án lớn là khá vất vả. Số này mình xin giới thiệu một option trong rails routes rất hữu ích đó là -g. Đến bây giờ mới biết vì trước đó mình dùng rails routes | grep ..., cách này vẫn ổn nhưng dài hơn so với các sử dụng option.
Trước rails 7: Bạn chỉ có thể tìm kiếm được dạng rails routes -g users/:user_id/posts/:post_id hoặc rails routes -g users
Sau rails 7 (> 7.0.3):
Bạn có thể sử dụng path dễ hiểu hơn là rails routes -g users/1/posts/1. Chúng ta không phải nhớ chính xác tên symbol trong route.
Tham khảo:
https://blog.saeloun.com/2022/09/06/extend-routes-grep-functionality
@tanhit243
tanhit243 / gist:fe7a40914a26171c300c65ff06bfd0d4
Created September 25, 2022 15:28
Floating-point in ruby
:info_neon: Chuyên mục MIL - Monday I learn - 004
Số trước mình đã giới thiệu về các tìm kiếm nhanh route với rails routes -g
Trong tuần này mình xin giới thiệu về BigDecimal ruby.
Ví dụ: Nếu ở ngoài đời khi được hỏi kết quả của phép toán 0.1 + 0.2 có bằng 0.3 không thì câu trả lời luôn là có quá ez. Nhưng với máy tính thì không. Hãy bật rails c lên và thử phép toán thì kết quả trả về là false
```
irb(main):013:0> 0.1 + 0.2
=> 0.30000000000000004
irb(main):014:0> 0.1 + 0.2 == 0.3
=> false
irb(main):015:0>
@tanhit243
tanhit243 / comparison validator
Created October 23, 2022 15:48
comparison validator in rails 7
:info_neon: Chuyên mục MIL - Monday I learn - 006
Số trước em đã giới thiệu về each_with_object method giúp chúng ta giảm bớt được bước khai bái biến trước.
Trong tuần này mình xin giới thiệu về comparison validator mới trong rails 7.
Trước rails 7: Nếu cần một logic validation kiểu start_time không được lớn hơn end_time hoặc time > now thì chúng ta phải tự define hoặc dùng gem bên ngoài.
class Event < ApplicationRecord
validates :start_date, presence: true
validates :end_date, presence: true
:info_neon: Chuyên mục MIL - Monday I learn - 007
Số trước em đã giới thiệu về validates_comparison_of method giúp chúng ta thêm validate kiểu so sánh với thời gian, ...
Trong tuần này mình xin giới thiệu về method includes trong RoR.
Đây là một method dạng tải dữ liệu từ DB ra và lưu trong bộ nhớ tạm để RoR sử dụng tránh vấn đề n+1 query.
Trong dự án hiện tại em thấy mọi người dùng cũng khưa khứa nên em cũng muốn chia sẻ những kiến thức và kinh nghiệm của em khi sử dụng
includes trong RoR. Bên cạnh includes mọi người có biết đến pre_load và eager_load không?
Vì bài cũng khá dài nên em xin phép link tới https://docs.google.com/document/d/1ZfmGmo79gap0H56mZ1TftjdVGNCaZRgqGrGJ7rBkw0k/edit?usp=sharing
:info_neon: Chuyên mục MIL - Monday I learn - 008
Nhân dịp đầu năm 2023 em xin chúc mọi người mạnh khỏe, vui vẻ và thành công ạ.
Trong số này em xin giới thiệu về một trong những ý tưởng có thể cải thiện tốc độ chạy unitest hay cụ thể rspec.
Nếu mọi người để ý thì khi sử dụng rspec thì đều chạy trên 1 process duy nhất.
Điều này có lẽ sẽ phù hợp về thời kì đầu năm 2000 vì CPU có 1 đến 2 nhân nhưng bây giờ có lẽ là hơi lạc hậu khi CPU đã có tới 4 nhân, 8 luồng và hơn thế nữa.
Việc sử dụng rspec trên 1 process duy nhất khiến thời gian chạy rất lâu và không tối ưu resource chúng ta có.
Vậy một câu hỏi đặt ra là chúng ta có thể sử dụng nhiều process hơn của CPU không?
Câu trả lời là có và một chiếc gem https://github.com/grosser/parallel_tests sẽ giải quyết giúp ta vấn đề này.
@tanhit243
tanhit243 / ssh in my using ssh
Last active February 12, 2023 04:12
ssh in my using ssh
:info_neon: Chuyên mục MIL - Monday I learn - 010
Chắc hẳn mọi người không còn lạ lẫm gì với cmd ssh đúng không ạ? Trong số này em xin giới thiệu về một số kinh nghiệm sử dụng trong công việc với ssh.
1. Luôn thiết lập tập tin config trong thư mục .ssh
Ưu điểm: Truy cập đến remote server một cách nhanh chóng mà không cần nhớ user, ip, port vv...
Lưu ý: Mỗi remote server sẽ tạo riêng một cặp key. Không dùng chung 1 cặp key duy nhất cho toàn bộ remote server.
Nếu bạn không may mắn để lộ private key và một vài thông tin khác thì có thể người có ý đồ xấu sẽ vào được toàn bộ các server khác.
Ví dụ: dev => abc_dev.key, stg => abc_stg
```