- vừa được xem lúc

Gems for common validators

0 0 31

Người đăng: Le Tan Thanh

Theo Viblo Asia

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ào Gemfile
    # 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: "_@.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: "_@.com"
    user.valid? # true user = User.create email: "_@.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ào Gemfile
    # 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

b. Install

  • Thêm gem validates_timeliness vào Gemfile
    # 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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp gem thông dụng trong Rails - Phần 2: Faker và Friendly Id

Ở phần này mình sẽ giới thiệu 2 gems rất quen thuộc với Ruby developers và hơn nữa, mình nghĩ đây cũng là những gem sẽ giúp ích cho các bạn newbies trong quá trình học Ruby on Rails. I. Gem Faker. 1.

0 0 84

- vừa được xem lúc

Gem paper_trail

1. Introduce. . Gem paper_trail được dùng để tracking sự thay đổi của model object và chia thành các version khác nhau.

0 0 29

- vừa được xem lúc

How to drop a table in Ruby

Issue. Với những dự án mới hoặc những dự án nhỏ tự làm, hầu hết bạn sẽ phải thường xuyên thay đổi cấu trúc DB dẫn tới việc phải thực hiện các câu lệnh như rails db:drop db:create db:migrate khá nhiều lần.

0 0 17

- vừa được xem lúc

Một số tips giúp ứng dụng Ruby on Rails bảo mật hơn

Tổng quan. Các Web framework ra đời giúp cho các lập trình viên phát triển các ứng dụng web một cách nhanh chóng và tiện lợi.

0 0 80

- vừa được xem lúc

6 vòng lặp Ruby nâng cao

. Ruby là ngôn ngữ với nguyên tắc "tối ưu hóa cho nhà phát triển". Đó là một ngôn ngữ dễ đọc, dễ viết, tích hợp, mẫu và nguyên mẫu cùng với các lợi ích khác.

0 0 84

- vừa được xem lúc

Rails bundler

1. Introduce. . Một trong những command được sử dụng nhiều nhất khi làm việc với Rails có lẽ là bundle install =)).

0 0 29