And*_*ers 4 ruby currency ruby-on-rails money-rails
我money-rails在Rails应用程序中使用了gem。到目前为止,它一直运行良好,但是最近我开始出现以下错误:
Money#== supports only zero numerics
Run Code Online (Sandbox Code Playgroud)
我不确定这是什么原因或如何解决。我最近跑步,bundle update所以我想有些东西已经更新。我的gemfile样子是这样的:
gem 'money-rails', '~>1'
gem 'eu_central_bank', "~>1.3.0"
Run Code Online (Sandbox Code Playgroud)
我的实现如下所示:
# model
monetize :price_in_cents
# fetch / converting currencies
eu_bank = EuCentralBank.new
Money.default_bank = eu_bank
eu_bank.update_rates
converted_price = eu_bank.exchange_with(Money.new(price_to_convert * 100, from_currency), to_currency)
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的那样,这已经解决了,所以我不确定是什么在破坏它。
有任何想法吗?
更新资料
为了测试,我尝试了以下方法。
money = Money.new(100, from_currency)
Run Code Online (Sandbox Code Playgroud)
然后我得到了和以前一样的错误。但是,如果我尝试过:
money = Money.new(0, from_currency)
Run Code Online (Sandbox Code Playgroud)
它似乎有效。我觉得有点奇怪。
更新资料
这是我尝试保存记录时的回溯信息:
[“ /Users/[user]/.rvm/gems/ruby-2.5.1/gems/money-6.11.3/lib/money/money/arithmetic.rb:70:in!= =='", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activemodel-5.1.6/lib/active_model/validations/numericality.rb:22:in'”,“ / Users / [user] /。rvm / gems / ruby-2.5.1 / gems / activemodel-5.1.6 / lib / active_model / validations / numericality.rb:22:invalid validate_each'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activemodel-5.1.6/lib/active_model/validator.rb:150:inin“ ,,” / Users / [user] / .rvm / gems / ruby-2.5.1 / gems / activemodel-5.1.6 / lib / active_model / validator.rb:147:in each'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activemodel-5.1.6/lib/active_model/validator.rb:147:invalidate'“,” / Users / [用户] /。rvm / gems / ruby- 2.5 .1 / gems / activesupport-5.1.6 / lib / active_support / callbacks.rb:413:block in make_lambda'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:197:in中止(“ 2级”)中的“”,“ / Users / [用户] /。rvm / gems / ruby- 2.5.1 /gems/activesupport-5.1.6/lib/active_support/callbacks.rb:601:in block (2 levels) in default_terminator'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:600:incatch'“,” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activesupport-5.1.6 /lib/active_support/callbacks.rb:600:inblock in default_terminator'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:198:in停止” block in invoke_before'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:507:in',“ /” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activesupport-5.1.6 / lib / active_support / callbacks.rb:507:in each'“,” /用户/ [用户] /。rvm / gems / ruby-2.5.1 / gems / activesupport-5.1.6 / lib / active_support / callbacks.rb:507:在invoke_before'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:130:inrun_callbacks中“”,“ /用户/ [用户] /。rvm /gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:827:in _run_validate_callbacks'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activemodel-5.1.6/lib/active_model/validations.rb:405:inrun_validations!'“,” / Users / [用户] /。rvm / gems / ruby-2.5。 1 / gems / activemodel-5.1.6 / lib / active_model / validations / callbacks.rb:114:在block in run_validations!'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/callbacks.rb:97:inrun_callbacks'“,” / Users / [user] /。rvm / gems / ruby-2.5.1 / gems / activesupport- 5.1.6 / lib / active_support / callbacks.rb:827:在_run_validation_callbacks'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activemodel-5.1.6/lib/active_model/validations/callbacks.rb:114:inrun_validations!'“,” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activemodel- 5.1.6 / lib / active_model /validations.rb:335:invalid?'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/validations.rb:65:in有效吗?'“,” / Users perform_validations'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/validations.rb:50:in/ [用户] /。rvm / gems / ruby-2.5.1 / gems / activerecord-5.1.6 / lib / active_record / validations.rb:82:in save!'“,” /用户/ [用户] /。rvm / gems / ruby-2.5.1 / gems / activerecord-5.1.6 / lib / active_record / attribute_methods / dirty.rb:43:save!'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/transactions.rb:313:in保存在块中!'“,” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activerecord-5.1.6 / lib / active_record / transactions.rb:384:block in with_transaction_returning_status'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/database_statements.rb:235:in交易中的代码块'“,” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activerecord-5.1.6 / lib / active_record / connection_adapters / abstract / transaction.rb:194:in block in within_new_transaction'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/monitor.rb:226:inmon_synchronize'“,” /Users/[user]/.rvm/gems/ruby- 2.5.1 / gems / activerecord-5.1.6 / lib / active_record / connection_adapters / abstract / transaction.rb:191:in within_new_transaction'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/database_statements.rb:235:intransaction'“,” / Users / [用户] /。rvm / gems / ruby- 2.5。1 / gems / activerecord-5.1.6 / lib / active_record / transactions.rb:210:intransaction'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/transactions.rb:381:inwith_transaction_returning_status'“ save!'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activerecord-5.1.6/lib/active_record/suppressor.rb:46:in,” /用户/ [用户] /。rvm / gems / ruby-2.5.1 / gems / activerecord-5.1.6 / lib / active_record / transactions.rb:313:in save!'“,” /用户/[user]/Documents/Development/wondery/[appname]/lib/importers/bts_wholesaler_importer.rb:245:in block in set_supported_currencys_for_product_variant'", "/Users/[user]/Documents/Development/wondery/[appname]/lib/importers/bts_wholesaler_importer.rb:240:ineach'“,” / Users / [user] / Documents / Development / wondery / [appname] / lib / importers / bts_wholesaler_importer.rb:240:在set_supported_currencys_for_product_variant'", "/Users/[user]/Documents/Development/wondery/[appname]/lib/importers/bts_wholesaler_importer.rb:224:inset_up_product_variant中“”,“ / Users / [用户] / Documents / Development / wondery / [appname] /lib/importers/bts_wholesaler_importer.rb:208:match_product_variant_to_product'", "/Users/[user]/Documents/Development/wondery/[appname]/lib/importers/bts_wholesaler_importer.rb:84:in在get_products_from_api_data中”,“ /”用户/ [用户] /文档/开发/奇迹/[appname]/lib/importers/bts_wholesaler_importer.rb:75:在map'", "/Users/[user]/Documents/Development/wondery/[appname]/lib/importers/bts_wholesaler_importer.rb:75:inget_products_from_api_data中“,”/ Users / [用户] / Documents / Development / wondery / [appname] /lib/importers/bts_wholesaler_importer.rb:25:inimport'", "(irb):2:inirb_binding'“,” eval'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb/workspace.rb:85:in/ Users / [用户] /。rvm / rubies / ruby-2.5.1 / lib / ruby / 2.5.0 / irb / workspace.rb:85:in 评估'“,” / Users / [用户] /。rvm / rubies / ruby-2.5.1 / lib / ruby / 2.5.0 / irb / context.rb:380:evaluate'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb.rb:491:in在eval_input 中的块(2个级别)'“,” / Users / [user] /。rvm /rubies/ruby-2.5.1/lib/ruby/2.5.0/irb.rb:623:signal_status'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb.rb:488:in在eval_input中的块''',“ /Users/[user]/.rvm/rubies/ruby-2.5.1/lib /ruby/2.5.0/irb/ruby-lex.rb:246:in block (2 levels) in each_top_level_statement'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb/ruby-lex.rb:232:inloop'“,” / Users / [用户] /。rvm / rubies / ruby-2.5.1 / lib / ruby / 2.5.0 / irb /ruby-lex.rb:232:在block in each_top_level_statement'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb/ruby-lex.rb:231:incatch'“,” / Users / [用户] /。rvm / rubies / ruby-2.5.1 / lib / ruby / 2.5.0 / irb / ruby-lex.rb:231 :in each_top_level_statement'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb.rb:487:ineval_input'“ block in run'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb.rb:427:in,” / Users / [用户] /。rvm / rubies / ruby-2.5.1 / lib / ruby / 2.5.0 / irb.rb :428 :in catch'“,” // Users / [用户] /。rvm / rubies / ruby-2.5.1 / lib / ruby / 2.5.0 / irb.rb:427:inrun'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/2.5.0/irb.rb:383:in开始”,“ / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / railties-5.1.6 / lib / rails / commands / console / console_command.rb:62:in start'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/railties-5.1.6/lib/rails/commands/console/console_command.rb:17:instart'”, “ perform'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor/command.rb:27:in/ Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / railties-5.1.6 / lib / rails / commands / console / console_command.rb:97:in run'”,“ / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / thor-0.20.0 / lib / thor / invocation.rb:126:in invoke_command'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/thor-0.20.0/lib/thor.rb:387:indispatch'“,” / Users / [用户] /。rvm / gems /ruby-2.5.1/gems/railties-5.1.6/lib/rails/command/base.rb:63:in perform'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/railties-5.1.6/lib/rails/command.rb:44:ininvoke'“,” / Users / [user] /。rvm / gems / ruby-2.5.1 /gems/railties-5.1.6/lib/rails/commands.rb:16:in <top (required)>'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:inrequire'“,” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activesupport-5.1.6 /lib/active_support/dependencies.rb:292:in block in require'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:inload_dependency'“,” / Users / [用户] /。rvm / gems / ruby-2.5。1 / gems / activesupport-5.1.6 / lib / active_support / dependencies.rb:292:inrequire'", "/Users/[user]/Documents/Development/wondery/[appname]/bin/rails:9:in'“,load'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:in” / Users / [用户] /。rvm / gems / ruby-2.5.1 / gems / activesupport-5.1.6 / lib / active_support / dependencies.rb:286:in block in load'“,” /用户/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in load_dependency'", "/Users/[user]/.rvm/gems/ruby-2.5.1/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:286:inload'“,” /Users/[user]/.rvm/红宝石/ruby-2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in require'", "/Users/[user]/.rvm/rubies/ruby-2.5.1/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:inrequire'“,” -e:1:in` '“]
您在编写规范时也可能会遇到此错误:
expect(order.subtotal).to eq 123.45
# ArgumentError:
# Money#== supports only zero numerics
expect(order.subtotal).to eq Money.new(12345)
# works!
Run Code Online (Sandbox Code Playgroud)
该错误来自模型的数值验证。
Money gem不允许将Money对象与Number进行比较,除非您的数字为零。否则,它希望您将“金钱与金钱”进行比较。
在irb中,您可以尝试:
红宝石
2.5.1 :006 > Money.new(1000, "USD") != Money.new(1000, "USD")
=> false
2.5.1 :007 > Money.new(1000, "USD") != 1000
Traceback (most recent call last):
4: from /Users/andi/.rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>'
3: from (irb):7
2: from (irb):7:in `!='
1: from /Users/andi/.rvm/gems/ruby-2.5.1/gems/money-6.12.0/lib/money/money/arithmetic.rb:70:in `=='
ArgumentError (Money#== supports only zero numerics)
2.5.1 :008 > Money.new(1000, "USD") != 0
=> true
Run Code Online (Sandbox Code Playgroud)
```
我相信这个错误是有道理的,因为您无法真正比较任意数字和给定货币数量的金额。
钱轨宝石再次带有它自己的验证器:
https://github.com/RubyMoney/money-rails#numericality-validation-options
回溯显示您正在使用rails数字验证器。
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |