Gems for common validators
Bài đăng này đã không được cập nhật trong 4 năm
1. Introduce
- Để thực hiện validate ở server, Rails cung cấp sẵn rất nhiều validation helper.
- Bên cạnh đó Rails cũng cho phép custom validator để tạo các validator phù hơp với business logic của dự án
- Hoặc sử dụng các gem có sẵn trên rubygem phù hợp với dự án mà không cần viết lại.
2. Email
a. Introduce
- Validate email là 1 validator cơ bản được sử dụng trong nhiều dự án khác nhau.
- Thậm chí còn được sử dụng làm ví dụ cho phần custom validator trên guide của ruby on rails
class EmailValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i record.errors.add attribute, (options[:message] || "is not an email") end end end class Person < ApplicationRecord validates :email, presence: true, email: true end
- Đối với gem thì chúng ta có thể sử dụng gem email_validator
b. Install
- Thêm gem
email_validator
vàoGemfile
# Gemfile gem 'email_validator'
- Sử dụng email validator trong model
# app/model/user.rb class User < ApplicationRecord validates :email, email: true end
- Check lại trên rails console
user = User.create email: "le.tan.thanh" user.valid? # false user = User.create email: "le.tan.thanh@sun-asterisk.com" user.valid? # true
c. Advance options:
- Gem
email_validator
cũng cung cấp thêm các option khác phục vụ cho việc validate - Option
domain
: chỉ các email có domain đúng với domain được khai báo mới pass được validation# app/model/user.rb class User < ApplicationRecord validates :email, email: { domain: "sun-asterisk.com" } end
user = User.create email: "le.tan.thanh@gmail.com" user.valid? # true user = User.create email: "le.tan.thanh@sun-asterisk.com" user.valid? # true
- Ngoài ra còn có 1 số option khác là
allow_nil
,require_fqdn
,mode
3. Url
a. Introduce
- Bên cạnh email thì url cũng là 1 validator được sử dụng trong nhiều dự án khác nhau.
- Đối với gem thì chúng ta có thể sử dụng gem validates_url
b. Install
- Thêm gem
validate_url
vàoGemfile
# Gemfile gem 'validate_url'
- Sử dụng email validator trong model
# app/model/user.rb class User < ApplicationRecord validates :homepage, url: true end
- Check lại trên rails console
user = User.create homepage: "home-page" user.valid? # false user = User.create homepage: "http://localhost:3000/home-page" user.valid? # true
c. Advance options:
- Gem
validate_url
cũng cung cấp thêm các option khác phục vụ cho việc validate - Option
no_local
: chỉ các email có không có domain làlocalhost
mới pass được validation# app/model/user.rb class User < ApplicationRecord validates :homepage, url: { no_local: true } end
user = User.create homepage: "http://localhost:3000/home-page" user.valid? # false user = User.create homepage: "http://example.com/home-page" user.valid? # true
- Ngoài ra còn có 1 số option khác là
allow_nil
,allow_blank
,schemes
,public_suffix
4. Datetime
a. Introduce
- Chúng ta có thể sử dụnh gem validates_timeliness để validator datetime.
b. Install
- Thêm gem
validates_timeliness
vàoGemfile
# Gemfile gem 'validates_timeliness'
- Generate các file config cần thiết
rails generate validates_timeliness:install
- Sử dụng email validator trong model
# app/model/user.rb class User < ApplicationRecord validates :date_of_birth, timeliness: { on_or_before: lambda { 18.years.ago } } end
- Check lại trên rails console
user = User.create date_of_birth: Time.zone.now user.valid? # false user = User.create date_of_birth: 18.years.ago user.valid? # true
c. Advance options:
- Gem
validates_timeliness
cũng cung cấp thêm các option khác phục vụ cho việc validate - Option
no_local
: chỉ các email có không có domain làlocalhost
mới pass được validation# app/model/user.rb class User < ApplicationRecord validates :homepage, url: { no_local: true } end
user = User.create homepage: "http://localhost:3000/home-page" user.valid? # false user = User.create homepage: "http://example.com/home-page" user.valid? # true
- Ngoài ra còn có 1 số option khác là
is_at
,before
,after
,on_or_after
,type
All rights reserved