Tham khảo: http://guides.rubyonrails.org/active_record_validations.html

Validates là các thao tác kiểm tra dữ liệu trước khi lưu 1 object vào DB.
Ta cần biết khi các method nào sẽ gọi validate trong Rails.

Các method dưới đây sẽ gọi validate :

create

create!

save

save!

update

update!

Các method dưới đây sẽ không gọi validate :

decrement!

decrement_counter

increment!

increment_counter

toggle!

touch

update_all

update_attribute

update_column

update_columns

update_counters

Validates helper

ActiveRecord có sẵn rất nhiều các helper để trợ giúp validation.

  • Không được bỏ trống
validates :name, presence: true
  • Các giá trị boolean
validates :anwser, inclusion: {in: [true, false]}
  • Checkboxs
validates :category, acceptance: true
  • Phải để trống
validates :login, absence: true
  • Tính duy nhất
validates :email, uniqueness: true
  • Tính đồng nhất (So sánh tính đồng nhất giữa tên thuộc tính và #{tên thuộc tính}_confirmation.)
validates :email, confirmation: true
  • inclusion: Kiểm tra giá trị có nằm trong tập hợp cho trước không.
validates :kind, inclusion: {in: %w(draft publish private)}
  • exclusion: Kiểm tra giá trị không được nằm trong tập hợp cho trước.
validates :country, exclusion: {in: %w(VN JP ID US)}
  • Độ dài
validates :title,    length: { minimum: 1 }       # 1 kí tự trở lên
validates :title,    length: { maximum: 10 }      # 10 kí tự trở xuống
validates :title,    length: { in: 1..10 }        # 1 kí tự trở lên, 10 kí tự trở xuống
validates :password, length: { is: 8 }
  • Validate kiểu số
validates :age, numericality: true
  • Email
VALID_EMAIL_REGEX = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX }
  • Model liên quan. Khi các model liên quan với nhau bằng các khai báo như has_many, … thì cách viết sau giúp ta tiến hành thực hiện validations ở cả 2 model.
validates_associated :posts
  • Validation tự định nghĩa. Trong một số trường hợp các validation có sẵn vẫn không thoả mãn yêu cầu của bạn, bạn có thể tự viết các validation của riêng mình.
validate :check_user_status_post, on: :create
def check_user_status_post
      errors.add :base, 'You have not permisson to post' if!self.user.user_post_status
end

Hy vọng bài viết này sẽ giúp các bạn làm quen với Rails dễ dàng hơn! :)