Tổng hợp các cách sử dụng validation trong Rails
Bài đăng này đã không được cập nhật trong 9 năm
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
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!
All rights reserved