Skip to content

Chapter 6#2

Merged
VuXuanBac merged 1 commit intomainfrom
chapter_6
Oct 27, 2023
Merged

Chapter 6#2
VuXuanBac merged 1 commit intomainfrom
chapter_6

Conversation

@VuXuanBac
Copy link
Copy Markdown
Owner

WHAT (optional)

  • User Model
  • Validation
  • Model Test
  • Password support

Notes (Kiến thức tìm hiểu thêm)

Uniqueness by Scope

Trong nhiều trường hợp, ta không cần thiết phải thiết lập một trường là duy nhất toàn cục. VD: Tên dự án (Github) của cá nhân chỉ cần là duy nhất đối với từng tài khoản. Xem xét cụ thể hơn thì chính là yêu cầu Unique với một tổ hợp nhiều trường dữ liệu.

VD:

# (Guest, Restaurant, Date) must be unique -> A guest could have one reservation at a restaurant per day

## Validation
validates :guest_id, uniqueness: {scope: [ :restaurant_id, :reservation_date ]}

## Index
add_index :reservations, [:guest_id, :restaurant_id, :reservation_date], unique: true,

Migration

Migration là công cụ dùng để thay đổi cấu trúc Database

  • Giúp người dùng tương tác với DB không thông qua DDL, mà sử dụng ngôn ngữ lập trình (Ruby) => Độc lập với DB => Có thể sử dụng DBMS khác nhau.
  • Các Migration được lưu trữ dưới dạng các tệp với dấu thời gian => Dễ dàng rollback + Phản ánh sự thay đổi theo thời gian.

Callback

Callback là các methods gắn vào vòng đời của một object cho phép kiểm soát các thao tác (create, update, destroy) tác động lên object đó. Cụ thể, callback là đoạn mã được kích hoạt trước hoặc sau thao tác thay đổi trạng thái trên object.

VD: Các callbacks được gọi cho các thao tác liên quan đến:

  • Tạo object: before_validation, before_save, before_create,...

  • Cập nhật object: before_validation, before_save, before_update,...

  • Xóa object: before_destroy,...

  • after_create: Được gọi ngay trước khi lưu object vào DB (save, create).=> có thể rollback, chưa có record.

  • after_save: Được gọi sau khi lưu object vào DB (save, create) nhưng trước khi kết thúc giao dịch => có thể rollback, đã có record.

  • after_commit: Được gọi khi giao dịch đã kết thúc (create, update, destroy) => KHÔNG thể rollback.

    • Có thể chỉ định thao tác qua hash option với key :on.

has_secure_password and BCrypt

has_secure_password dùng để thêm tính năng xác thực qua password cho Model, cụ thể:

  • Thêm các thuộc tính (chỉ có trên Model object) chỉ đọc có dạng XXXXXX_confirmation. VD: XXX: password
  • Thêm validation cho hai thuộc tính này: NOT NULL và MATCH.
  • Băm XXX về XXX_digest (sử dụng hàm băm BCrypt) trước khi lưu vào DB.
  • Cung cấp method authenticate trả về Model instance nếu cung cấp XXX chính xác và ngược lại trả về false.

Để sử dụng method này, Model cần có trường XXX_digest

@VuXuanBac
Copy link
Copy Markdown
Owner Author

Functionalities:

  • User Model
  • Validation
  • Model Test
  • Password support

@VuXuanBac
Copy link
Copy Markdown
Owner Author

ready

@VuXuanBac VuXuanBac force-pushed the chapter_6 branch 2 times, most recently from 57fcf03 to 2d4957f Compare October 27, 2023 08:58
Copy link
Copy Markdown

@huongnt-2545 huongnt-2545 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merged nhé

class User < ApplicationRecord
before_save { self.email = email.downcase }

validates :name, presence: true, length: { maximum: 50 }
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cho các giá trị 50, 255, ... vào file settings nhé

@VuXuanBac VuXuanBac merged commit 4ae7794 into main Oct 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants