Tổng hợp các cách sử dụng validation trong Rails
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 ...
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!