12/08/2018, 17:16
Sử dụng gem RubyMoney(Money-Rails) trong ứng dụng rails
Trong quá trình xây dựng một trang eCommerce thì việc lựa chọn xậy dựng đơn vị tiền tệ là một rào cản, với sự hỗ trợ của thư viện gem money-rails làm cho sự lựa chọn đó trở nên dẽ dàng hơn với rất nhiều tiện ích thuận tiện. Cài đặt gem Thêm vào Gemfile gem "money-rails" # nhớ chạy lệnh ...
Trong quá trình xây dựng một trang eCommerce thì việc lựa chọn xậy dựng đơn vị tiền tệ là một rào cản, với sự hỗ trợ của thư viện gem money-rails làm cho sự lựa chọn đó trở nên dẽ dàng hơn với rất nhiều tiện ích thuận tiện.
Cài đặt gem
- Thêm vào Gemfile
gem "money-rails" # nhớ chạy lệnh *bundle*
hoặc
gem install money-rails
- Bạn có thể cài đặt môi trường khởi tạo đầu tiên bằng lệnh:
rails g money_rails:initializer # sẽ sinh ra file config/initializers/money.rb MoneyRails.configure do |config| config.default_currency = :usd config.add_rate "USD", "CAD", 1.24515 config.add_rate "USD", "VND", 22727 end
- Khởi tạo giá trị mặc định của tiền tệ:
Thêm dòng:
# config/initializers/money.rb config.default_currency = :usd
Tạo mẫu data test
- Ta xây dựng một migrate data với model Product:
class CreateCategories < ActiveRecord::Migration[5.1] def change create_table :products do |t| t.string :name t.monetize :price t.string :description t.timestamps end end end
#app/model/product.rb class Product < ApplicationRecord monetize :price_cents, :allow_nil => true end
- Lúc này giá trị attribute của một đối tượng product:
irb(main):031:0> Product.new => #<Product id: nil, name: nil, price_cents: 0, price_currency: "USD", description: nil, created_at: nil, updated_at: nil>
- Ta thử tạo một đối tượng product:
product=Product.new(name:"Laptop") product.price = Money.new(100, "USD") product.save irb(main):006:0> product => #<Product id: 1, name: "Laptop", price_cents: 100, price_currency: "USD", description: nil, created_at: "2018-02-02 04:46:46", updated_at: "2018-02-02 04:46:46"> irb(main):007:0> product.price => #<Money fractional:100 currency:USD> #Giá trị của price lúc này có type là Money
Các giá trị Configuration
- Một số tham số để custom giá trị mặt định:
# config/initializers/money.rb - default_currency: Giá trị đơn vị tiền tệ (mặc định là USD) #config.default_currency = :usd - add_rate: Cung cấp tỉ giá hối đoái cho các loại tiền tệ # config.add_rate "USD", "CAD", 1.24515 - default_bank: Giá trị mặc định tỉ giá - default_format: Tùy chọn định dạng
Một số helper hỗ trợ
#price = product.price #=> #<Money fractional:850 currency:USD> currency_symbol # <span class="currency_symbol">$</span> humanized_money price # => 8.50 humanized_money_with_symbol price #=> $8.50 money_without_cents_and_with_symbol price #=> $8 money_without_cents price #=> 8
Một số ví dụ về sự tiện ích khi sử dụng money-rails
# Phép toán irb(main):011:0> Money.new(800, "USD") + Money.new(200, "USD") => #<Money fractional:1000 currency:USD> irb(main):012:0> Money.new(800, "USD") - Money.new(200, "USD") => #<Money fractional:600 currency:USD> irb(main):013:0> Money.new(800, "USD") / 2 => #<Money fractional:400 currency:USD> irb(main):014:0> Money.new(800, "USD") * 2 => #<Money fractional:1600 currency:USD> # Chuyển đổi tiền tệ irb(main):001:0> Money.new(1000, "USD").exchange_to("CAD") # config.add_rate "USD", "CAD", 1.24515 => #<Money fractional:1245 currency:CAD irb(main):002:0> Money.new(9800, "USD").exchange_to("VND") #config.add_rate "USD", "VND", 22727 => #<Money fractional:2227246 currency:VND> # Chuyển đổi định dạng format irb(main):003:0> Money.new(2300, "USD").format => "$23.00" irb(main):005:0> Money.new(200, "EUR").format => "€2.00"
Link tham khảo: https://rubygems.org/gems/money-rails/versions/1.10.0