+3

Các câu hỏi phỏng vấn Ruby on Rails Developer - Phần 5

Về callbacks

Kể tên các callbacks

Callback là một phương thức của Active Record,cho phép bạn thực thi các phương thức đã khai báo trước đó một cách tự động trước khi (hoặc sau khi, hoặc cả trước và sau khi) một đoạn code khác trong chương trình được chạy
Thứ tự chạy của callbacks với mỗi hành động được thể hiện ở báng dưới đây.

CREATE UPDATE
before_validation before_validation
after_validation before_validation
before_save before_save
around_save around_save
before_create before_create
around_create around_create
after_create after_create
after_save after_save
after_commit/after_rollback after_commit/after_rollback
DELETE OTHER
before_destroy after_commit/after_rollback
around_destroy before_action và after_action
after_destroy after_initialize and after_find

Sử dụng như thế nào?

Sử dụng callback
before_action :method_callback, only/except: action_must_callback
Hoặc callback :method_callback

Skipping Callbacks
Khi sử dụng các phương pháp sau sẽ bỏ qua callbacks:

  • decrement
  • decrement_counter
  • delete
  • delete_all
  • increment
  • increment_counter
  • toggle
  • update_column
  • update_columns
  • update_all
  • update_counters

Tuy nhiên, Chúng ta nên thận trọng khi sử dụng những phương thức này vì các quy tắc nghiệp vụ quan trọng và logic ứng dụng có thể được giữ trong các cuộc gọi lại. Bằng cách chuyển chúng mà không hiểu các hàm ý tiềm năng có thể dẫn đến dữ liệu không hợp lệ.

Thế nào là Strong params?

Strong Parameters là một phương pháp để đối phó với lỗi bảo mật khi sử dụng tính năng Mass Assignment. Strong params để làm gì? Strong parameters ngăn chặn việc ta không kiểm soát được những giá trị trong params.

  • require(:user): bắt buộc trong params phải có key là user
  • permit(:name, :email) để xác định các thuộc tính sẽ truyền vào params. Nếu truyền thuộc tính không có trong permit thì nó sẽ không được lưu khi create/update và thuộc tính này sẽ không còn sau khi chạy qua strong params.

Nested attributes là gì?

Nested attributes là kỹ thuật dùng để create/remove các record này khi create/update record khác; thường áp dụng với các object có quan hệ has_one hoặc has_many.

Cơ chế của nested attribute

Để sử dụng cần kích hoạt nó bằng cách sử dụng phương thức accepts_nested_attributes_for trong model tương ứng Một số tùy biến khi sử dụng accepts_nested_attributes_for:

:allow_destroy

true hoặc false, nếu là true thì có thể xóa record

:reject_if

Cho phép bạn chỉ định một Proc hoặc một Symbol trỏ vào một phương thức để kiểm tra một bản ghi có được phép tạo ra hay không

:limit

Cho phép bạn chỉ định số lượng tối đa của các record liên quan có thể được xử lý với các thuộc tính lồng nhau :limit option chỉ áp dụng cho quan hệ one-to-many.

:update_only

Cho phép bạn chỉ định một record chỉ có thể được update thôi, nếu record đó đã tồn tại; khi chưa tồn tại thì có thể create. Chỉ hoạt động cho quan hệ one-to-one.

Cơ chế create một bản ghi

Ví dụ: User has one Avatar

user_params = require(:user).permit :username, avatar_attributes[:id, :url]

Khi new user ta lấy được params có dạng như sau:

{ user: 
  { 
    username: 'A', 
    avatar_attributes: { 
      url: 'abc.jpg' 
    } 
  } 
}
user  = User.create(params[:user])

Một số loại gem cơ bản

Để sử dụng gem thì ta cần khai báo gem đó trong tập tin Gemfile theo cú pháp sau

  gem "name of gem", ~version

Sau đó chạy lại bundle install để cài đặt gem và sử dụng
Một số gem cần tạo các tập tin để thiết đặt. Ví dụ như gem config dưới đây

    rails g config:install

Gem Pry-Rails

Bạn muốn debug ??? https://github.com/pry/pry binding.pry

Gem Config

Gem config giúp quản lý và sử dụng dễ dàng các settings trong project. Nói 1 cách đơn giản là tất cả các biến, giá trị cần dùng để cấu hình hệ thống được khai báo tập trung trong 1 hoặc 1 vài file
https://github.com/railsconfig/config

Gem figaro, dotenv

Quản lý toàn bộ biến môi trường của dự án
http://railsapps.github.io/rails-environment-variables.html

Gem kaminari

Dùng để phân trang
https://github.com/amatsuda/kaminari Dùng cùng với gem "bootstrap4-kaminari-views"

Pagy (replace kaminari)

Dùng để phân trang
https://github.com/ddnexus/pagy

Gem Devise

Devise là một gem rất linh hoạt được sử trong quá trình xác thực người dùng
https://github.com/plataformatec/devise

Gem CanCanCan

Phân quyền cho ruby on rails, nó hạn chế các tài nguyên được phép truy cập
https://github.com/CanCanCommunity/cancancan

PAPERCLIP hoặc CarrierWave

2 Gem đều dùng để upload ảnh hay file cho dự án của bạn , cách sử dụng của cả 2 đều không quá phức tạp nhưng mình khuyên dùng carrierwave.

Gem Ransack

Search được đơn giản và kết hợp được nhiều điều kiện search
https://github.com/activerecord-hackery/ransack

Background job: sidekiq, rescue, delayed job

https://github.com/mperham/sidekiq
https://github.com/resque/resque
https://github.com/codez/delayed_cron_job


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí