12/08/2018, 15:14

Detele whitespace before validation with StripAttributes

StripAttributes là một phần mở rộng của ActiveModel , nó giúp tự động xóa tất cả các khoảng trống đầu và cuối của thuộc tính trước khi xác nhận. Nếu thuộc tính là trống, mặc định sẽ dải giá trị cho nil. Nó hoạt động bằng cách thêm một before_validation. Theo mặc định, tất cả các thuộc tính đều ...

StripAttributes là một phần mở rộng của ActiveModel, nó giúp tự động xóa tất cả các khoảng trống đầu và cuối của thuộc tính trước khi xác nhận. Nếu thuộc tính là trống, mặc định sẽ dải giá trị cho nil. Nó hoạt động bằng cách thêm một before_validation. Theo mặc định, tất cả các thuộc tính đều bị loại bỏ khoảng trống, nhưng ta có thể tùy chỉnh lại nó theo yêu cầu.

Cài đặt:

Thêm gem vào Gemfile

gem "strip_attributes"

Chạy lệnh bundle

Thiết lập:

-Ở đây mình đang thiết lập cho model User, với các model khác thiết lập tương tự. Giả sử model User có các thuộc tính name, email, address, phone

class User < ApplicationRecord
     strip_attributes
end

khi thiết lập như vậy tất cả các thuộc tính id, name, email, address, phone trước khi xác nhận sẻ được xóa hết các khoảng trống đầu và cuối.

Tương tư như vậy ta có thể thiết lập các thuộc tính bằng các phương thức sau:

class User < ApplicationRecord
    strip_attributes only: [:name, :email] #Chỉ các thuộc tính name, email mới được stripped.
    strip_attributes except: :name #Tất cả các thuộc tính đều được stripped trừ thuộc tính name
    strip_attributes allow_empty: true #Thuộc tính rổng sẻ không được chuyển đổi thành nil
    strip_attributes collapse_spaces: true  #Các khoảng trắng(nhiều hơn 1 space) ở giữa các thuộc tính đều được chuyển thành 1 space
    strip_attributes replace_newlines: true #Dòng mới trong thuộc tính sẻ được chuyển đổi thành khoảng trắng(space) 
    strip_attributes only: [:name, :address], :regex => /[^[:alpha:]s]/  #Bỏ các ký tự được xác định bởi regex
    strip_attributes only: :phone, :regex => /[^0-9]/ #Bỏ các ký tự ko phải là số thực
    strip_attributes only: :phone, :regex => /[^[:alnum:]S]/ #Bỏ tất cả các khoảng trắng chỉ giử lại ký tự số và chử
end

Vì mới viết lần đầu nên sẻ không thể tránh nhiều thiếu sót, mong mọi người giúp đở và góp ý thêm ạ. Nguồn: https://github.com/rmm5t/strip_attributes

0