Ruby on Rails没有;t在mysql数据库中存储小数:在、之后截断数字,



Rails应用程序在mysql数据库中存储小数时遇到问题。我有一个包含两个字段的表单:"金额"one_answers"货币"。当我在"amount"字段中输入一个十进制值(例如1,22)时,Rails只将1存储在数据库中。

我的日志文件如下:

Started POST "/cashamounts" for 127.0.0.1 at 2012-02-04 13:23:54 +0100
  Processing by CashamountsController#create as HTML
  Parameters: {"utf8"=>"✓","authenticity_token"=>"QpWGfEtDR1tc7wTFmZZst9gYjKAyXtRypilsxDE9Tzs=", "cashamount"=>{"currency_id"=>"eur", "amount"=>"1,22"}, "commit"=>"Create Cashamount"}
  [1m[36mCurrency Load (2.8ms)[0m  [1mSELECT `currencies`.* FROM `currencies` ORDER BY name[0m
  [1m[35m (0.2ms)[0m  BEGIN
  [1m[36mSQL (0.3ms)[0m  [1mINSERT INTO `cashamounts` (`amount`, `created_at`, `currency_id`, `updated_at`) VALUES (1, '2012-02-04 12:23:54', 'eur', '2012-02-04 12:23:54')[0m
  [1m[35m (0.6ms)[0m  COMMIT
Redirected to http://localhost:3000/cashamounts/8
Completed 302 Found in 94ms

因此,金额正确地存储在params中,但没有正确地插入数据库。我检查了我的db/schema.rb文件。"金额"列的行为:

t.decimal  "amount",               :precision => 10, :scale => 2

我还能在哪里找到问题?

PS。我开始使用moneygem,但这显示了同样的问题:","之后的所有数字都没有存储。

这个问题有点老,但对于未来的访问者,我相信答案可以在的"Gotcha"部分找到

http://torontoprogrammer.ca/2010/05/decimal-numbers-in-rails-and-mysql/.

基本上,当您设置小数字段时,您必须指定scale参数来说明小数点右侧的位置。否则,mysql假设您希望所有的数字都在小数点的左边。

这个问题也困扰着我。在我的开发环境(使用sqlite)中一切都很好,但在生产环境(使用mysql)中,我的"十进制"数字的小数部分被截断了。

1,22是十进制值的欧洲表示法,而1.22是英国、美国和澳大利亚的惯例。您可能需要设置您的区域设置。

http://guides.rubyonrails.org/i18n.html#optional-定制18n-配置-设置

在初始化器中:

I18n.default_locale = :fr

或者在config/application.rb 的末尾

config.i18n.default_locale = :fr

问题是Rails需要小数点而不是逗号。如果这是用户输入,请尝试在保存到数据库之前用,代替.

相关内容

最新更新