**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 ```Ruby validates :name, presence: true ``` - Các giá trị boolean ```Ruby validates :anwser, inclusion: {in: [true, false]} ``` - Checkboxs ```Ruby validates :category, acceptance: true ``` - Phải để trống ```Ruby validates :login, absence: true ``` - Tính duy nhất ```Ruby 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.) ```Ruby validates :email, confirmation: true ``` - inclusion: Kiểm tra giá trị có nằm trong tập hợp cho trước không. ```Ruby 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. ```Ruby validates :country, exclusion: {in: %w(VN JP ID US)} ``` - Độ dài ```Ruby 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ố ```Ruby validates :age, numericality: true ``` - Email ```Ruby 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. ```Ruby 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. ```Ruby 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! :)