рджреВрд╕рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдкреИрд╕реЗ рдХреИрд╕реЗ рдЧрд┐рдиреЗрдВ

рд░реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЦ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рдкреИрд╕реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдлреНрд▓реЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рджрд╢рдорд▓рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЗрди-рджреЗрди рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╣реИрдВред рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпреЗ рдЯрд┐рдкреНрд╕ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реВрдЦрд╛ рдФрд░ рдЖрд░рд╛рдорджрд╛рдпрдХ рдорд╣рд╕реВрд╕ рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ, рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рджреЗрд╢реЛрдВ рдХреЗ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?





рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ: рдЖрд╡реЗрджрди рд╣рд╕реНрддрдореИрдереБрди рдХреЗ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рд╕реЗрд╡рд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╣, рд╕рд╢реБрд▓реНрдХ рдХрд╛рд░реНрдЯреВрдиред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╣рд░ рдХрд╛рд░реНрдЯреВрди рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд╢рдорд▓рд╡ рд░рд╛рд╢рд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд░реВрдмрд▓ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд╢рдорд▓рд╡ рд░рд╛рд╢рд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рджреЗрдЦрдиреЗ рдкрд░ рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рд╕рдм рдХреБрдЫ рд╢рд╛рдВрдд рд╣реИ, рдЬрдм рддрдХ рд╣рдо рддрдп рдирд╣реАрдВ рдХрд░рддреЗ рдХрд┐ рдпреВрдХреНрд░реЗрдиреА рдирд╛рдЧрд░рд┐рдХреЛрдВ рдХреЛ рдХрд╛рд░реНрдЯреВрди рджрд┐рдЦрд╛рдирд╛ рд▓рд╛рднрджрд╛рдпрдХ рд╣реЛрдЧрд╛ред рдЖрдЦрд┐рд░рдХрд╛рд░, Ukrainians рднреА рдХрд╛рд░реНрдЯреВрди рджреЗрдЦрдирд╛ рдФрд░ рдкреИрд╕рд╛ рдЦрд░реНрдЪ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдирд╛рдЧрд░рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд░реВрдмрд▓ рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рд╣реЛрдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ hryvnias рдореЗрдВ рд╡реЗрддрди рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдб рдкрд░ рд╢рд╛рдпрдж рдЙрдирдХреЗ рдкрд╛рд╕ hryvnias рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рд░ рдмрд╛рд░ рдорди рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░реВрдмрд▓ рдХрд╛рд░реНрдЯреВрди рдореЗрдВ рдХрд┐рддрдирд╛ рдЦрд░реНрдЪ рд╣реЛрдЧрд╛, рдХрд┐рд╕реА рддрд░рд╣ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИред

рдкреИрд╕рд╛



рдФрд░ рдпрд╣рд╛рдБ рджрд┐рди рдХреЗ рдЙрджреНрдзрд╛рд░рдХрд░реНрддрд╛ рдХреЗ рдЪрдордХрддреЗ рдХрд╡рдЪ рдореЗрдВ рд╣реЗрдо money ред рд╡рд╣ рд╡рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рдЪрд╛рд╣рд┐рдП:
 # 5  dollars = Money.new(500, 'USD') # 10 ! euros = Money.new(1000, 'EUR') # #   euros > dollars # => true #  euros.exchange_to('USD') # => #<Money cents:1408 currency:USD> #   !!11 Money.new(1000, 'USD') + Money.new(1000, 'EUR') # => #<Money cents:2408 currency:USD> 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реМрдВрджрд░реНрдп рдФрд░ рдЕрдзрд┐рдХред

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЫреБрдЯреНрдЯреА рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреА рд╣реИ, рд╡рд╣ рд░реЗрд▓ рдореЙрдбрд▓ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЧреИрд░-рддреБрдЪреНрдЫ рддрдВрддреНрд░ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

 # Gemfile gem 'money' gem 'google_currency', :require => 'money/bank/google_currency' # cartoon.rb class Cartoon < ActiveRecord::Base composed_of :price, :class_name => 'Money', :mapping => [[ 'price_in_cents', 'cents' ], [ 'currency', 'currency_as_string' ]], :constructor => Proc.new { |cents, currency| Money.new(cents || 0, currency || Money.default_currency) }, :converter => Proc.new { |value| value.respond_to?(:to_money) ? value.to_money : raise(ArgumentError, "Can't convert #{value.class} to Money") } end # migration create_table :cartoons do |t| # ... t.integer :price_in_cents, :default => 0, :null => false t.string :price_currency, :limit => 3, :null => false # ... end 


рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдореЙрдбрд▓ рдореЗрдВ рд╣реИред рдФрд░ рдЖрдкрдХреЛ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдореБрджреНрд░рд╛рдПрдВ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдВ:
 # intializers/money.rb Money.default_bank = Money::Bank::GoogleCurrency.new 


рдирдХрд╝рд▓реА



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рддреАрд╕рд░реЗ рдореЙрдбрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛, рддреЛ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд░рддреНрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдЬреЛ рдкреВрд░реА рдмрд╛рдд рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЦреИрд░, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ред

рдЗрд╕реЗ рдирдХрд▓реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд┐рдП рдЧрдП рдмреВрдЯреЛрдВ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
 # Gemfile gem 'counterfeit' # cartoon.rb class Cartoon < ActiveRecord::Base has_counterfeit :price #        # :currency => 'RUB' #    ,     . # :currency_attribute => :price_currency, # :amount_attribute => :price_in_cents end # migration create_table :cartoons do |t| # ... t.money :price # ... end 


Google рдХреЛ рдПрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдирдХ convector рдХреЗ рд╕рд╛рде рдореБрджреНрд░рд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕ рдкрд░ред рдорд╛рдирдХ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЖрдк рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдкрдХреЛ рдХрднреА рднреА рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдЯреВрди рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рд╣реИ, рддреЛ рдирдХрд▓реА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдФрд░ рдЖрдкрдХреЛ рдХреАрдбрд╝реЗ рдорд┐рд▓реЗрдВрдЧреЗ - рд▓рд┐рдЦреЛ, рдЕрдиреНрдпрдерд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░ рджрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рд░реБрдХрд┐рдП, рдФрд░ рднреА рд╣реИ


рдХреБрдЫ рдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдкрд╣рд▓реА рдмрд╛рд░ рдирдХрд▓реА рд╢рдмреНрдж рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЫрд╛рдкреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рджреВ рдЙрд░реНрдл тАЛтАЛрдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
 class Cartoon < ActiveRecord::Base has_money :price #   , ? end 

Source: https://habr.com/ru/post/In122022/


All Articles