Giới thiệu gem ZenginCode in ruby
Bài đăng này đã không được cập nhật trong 3 năm
1.Giới thiệu
ZenginCode là một datasets chứa các mã ngân hàng ( bank_code ) và mã chi nhánh ( branch_code ) của tất cả các ngân hàng của Nhật Bản. Nó có thể dùng để quick_check validation của input bank information của hệ thống.
ZenginCode hỗ trợ rất nhiều các ngôn ngữ khác nhau trong đó có ruby, danh sách các ngôn ngữ được hỗ trợ các bạn có thể xem tại đây
Trong bài viết này, tôi xin phép chỉ viết demo sử dụng gem ZenginCode trong Ruby. Chúng ta cùng nhau xây dựng một ứng dụng rails lưu thông tin ngân hàng của các User. Dùng gem zengin_code để check validation các trường input của bank_account
Source_data của ZenginCode được cung trực tiếp bởi trang tra cứu các ngân hàng của Nhật
http://ykaku.com/ginkokensaku/index.php
2.Cài đặt và sử dụng
2.1.Cài đặt
- Tạo một project mới.
$ rails new zengin_code_demo -d mysql
- Add thêm gem
zengin_code
vào Gemfile
#Gemfile
gem 'zengin_code'
- Chạy
bundle install
$ bundle install
hoặc
$ gem install zengin_code
2.2.Sử dụng
Thêm model BankAccount với chức năng thêm sửa xóa cơ bản bằng lệnh dưới đây.
$ rails generate scaffold BankAccount bank_code:string bank_name:string branch_code:string branch_name:string account_number:string account_holder:string
Ở đây chúng ta đã tạo ra bảng BankAccount với đầy đủ các trường:
- bank_code #mã ngân hàng
- bank_name #tên ngân hàng
- branch_code #mã chi nhánh
- branch_name #tên chi nhánh
- account_number #số tài khoản
- account_holder #tên chủ tài khoản
Để có thể sử dụng được ZenginCode trong các models, controllers của Rails chúng ta cần thêm require 'zengin_code'
.
#app/models/bank_account.rb
require 'zengin_code'
class BankAccount < ApplicationRecord
end
end
Ở đây chúng ta có thể đặt thử binding.pry
vào để kiểm tra xem gem zengin_code
đã load được chưa và xem xem ZenginCode có cấu trúc như thế nào.
Chúng ta có thể sử dụng các lệnh sau đây để tương tác với zengin_code:
- Kiểm tra tất cả các ngân hàng có trong thư viện bằng lệnh
ZenginCode::Bank.all
- Kiểm tra trong thư viện có bao nhiêu ngân hàng
ZenginCode::Bank.all.count
- Lấy ra tất cả các mã ngân hàng có trong thư viện theo dạng mảng.
ZenginCode::Bank.all.keys
- Kiểm tra thông tin của ngân hàng có bank_code là 0001:
ZenginCode::Bank.all['0001']
tiếp theo chúng ta có thể truy vấn xem tên của ngân hàng này theo các dạng tên thường viết bằng tiếng nhật, tên viết theo hiragana, tên viết theo katakana và tên viết theo chữ romaji bằng các lệnh như bên dưới đây:
- Load tất cả các chi nhánh có trong ngân hàng có bank_code '0001' :
ZenginCode::Bank.all['0001'].branches
- Kiểm tra xem trong ngân hàng 0001 có bao nhiêu chi nhánh:
ZenginCode::Bank.all['0001'].branches.count
- Lấy ra tất cả các mã chi nhánh của ngân hàng 0001 theo dạng mảng:
ZenginCode::Bank.all['0001'].branches.keys
- Kiểm tra thông tin của chi nhánh 001 của ngân hàng 0001:
ZenginCode::Bank.all['0001'].branches['001']
Ở đây, giống như bên trên, chúng ta có thể truy vấn xem tên chi nhánh này của ngân hàng 0001 theo các dạng tên thường viết bằng tiếng nhật, tên viết theo hiragana, tên viết theo katakana và tên viết theo chữ romaji bằng các lệnh như bên dưới đây:
Như vậy chúng ta cơ bản đã tìm hiểu xong cấu trúc lưu trữ dữ liệu của gem zengin_code
. Tiếp theo chúng ta có thể bắt tay vào viết hàm check_validate cho các trường trong form input.
2.3.Viết hàm check_validate
Trước tiên chúng ta cần validate presence: true
tất cả các trường cần thiết(các trường không được để trống.)
#app/models/bank_account.rb
require 'zengin_code'
class BankAccount < ApplicationRecord
validates :bank_code, :bank_name, presence: true
validates :branch_code, :branch_name, :account_number, :account_holder, presence: true
end
end
Tiếp theo chúng ta viết thêm một hàm check_bank_info
để check validate của các trường nhập vào. Ở đây chúng ta cần check các điều kiện sau:
- Mã ngân hàng nhập vào có tồn tại hay không.
- Tên ngân hàng nhập vào có khớp với tên ngân hàng có mã ngân hàng như trên trong hệ thống hay không.
- Mã chi nhánh nhập vào có tồn tại trong ngân hàng có mã ngân hàng như ở trên hay không.
- Tên chi nhánh nhập vào có khớp với tên chi nhánh có mã như trên trong hệ thống hay không.
#app/models/bank_account.rb
require 'zengin_code'
class BankAccount < ApplicationRecord
validates :bank_code, :bank_name, presence: true
validates :branch_code, :branch_name, :account_number, :account_holder, presence: true
validate :check_bank_info
def check_bank_info
banks = ZenginCode::Bank.all
return errors.add(:bank_code, I18n.t('errors.messages.bank_code_not_exist')) if banks[bank_code].nil?
bank_code_name = banks[bank_code].name
return errors.add(:bank_name, I18n.t('errors.messages.bank_name_not_exist')) unless bank_code_name === bank_name
branches = banks[bank_code].branches
return errors.add(:branch_code, I18n.t('errors.messages.branch_code_not_exist')) if branches[branch_code].nil?
branch_code_name = banks[bank_code].branches[branch_code].name
errors.add(:branch_name, I18n.t('errors.messages.branch_name_not_exist')) unless branch_code_name === branch_name
end
end
Nếu thỏa mãn các điều kiện trên thì thông tin ngân hàng nhập vào mới hợp lệ.
3.Lời Kết và Tài Liệu tham khảo.
Như vậy tôi đã giới thiệu xong với các bạn về cấu trúc và cách sử dụng gem 'zengin_code'
. Việc cài đặt và sử dụng gem này cũng khá đơn giản, chúc các bạn thành công trong việc áp dụng gem này vào trong dự án của các bạn.
Toàn bộ tài liệu tham khảo ở đây: https://github.com/zengin-code/zengin-rb
All rights reserved