ruby-on-rails - PostgreSQL 是否支持 Rails 的精度和规模?

标签 ruby-on-rails ruby-on-rails-3 postgresql

我有一个 Rails 应用程序,它定义了一个包含精度为 8 和小数位数为 2 的小数点的迁移。我设置的数据库是 PostgreSQL 9.1 数据库。

class CreateMyModels < ActiveRecord::Migration
    def change
        create_table :my_models do |t|
            t.decimal :multiplier, precison: 8, scale: 2
            t.timestamps
        end
    end
end

当我运行 rake db:migrate 时,迁移成功进行,但我在尝试运行 MyModel.find_or_create_by_multiplier 时注意到一个错误。如果我运行以下命令两次,该对象将被创建两次:

MyModel.find_or_create_by_multiplier(multiplier: 0.07)

我假设这应该在第一次调用期间创建对象,然后在第二次调用期间找到该对象。不幸的是,当乘数设置为 0.07 时,这似乎并没有发生。

对于我在上述命令中抛出的所有其他数字,这确实按预期工作。以下命令按预期工作(在第一次调用期间创建对象,然后在第二次调用期间查找对象)。

MyModel.find_or_create_by_multiplier(multiplier: 1.0)

MyModel.find_or_create_by_multiplier(multiplier: 0.05)

MyModel.find_or_create_by_multiplier(multiplier: 0.071)

当我查看 MyModel 表的 PostgreSQL 数据库描述时,我注意到该表对数字列没有限制。

   Column    |            Type             |                         Modifiers
-------------+-----------------------------+-------------------------------------------------------
 id          | integer                     | not null default nextval('my_models_id_seq'::regclass)
 multiplier  | numeric                     | 
 created_at  | timestamp without time zone | not null
 updated_at  | timestamp without time zone | not null

我的 db/schema.rb 文件也没有说明精度和比例:

ActiveRecord::Schema.define(:version => 20121206202800) do

...
    create_table "my_models", :force => true do |t|
        t.decimal  "multiplier"
        t.datetime "created_at",                   :null => false
        t.datetime "updated_at",                   :null => false
    end
...

所以我的第一个问题是,为什么我在迁移时没有看到精度和规模被推低到 PostgreSQL? Documentation states that it should be supported .

我的第二个问题是,为什么使用 MyModel.find_or_create_by_multiplier(multiplier: 0.07) 命令无法正确比较 0.07? (如果我需要为此打开另一个问题,我会的)。

最佳答案

这很尴尬......

我拼错了。

将迁移更改为:

t.decimal :multiplier, precision: 8, scale: 2

修复了一切。

关于ruby-on-rails - PostgreSQL 是否支持 Rails 的精度和规模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14271158/

相关文章:

ruby-on-rails - 如何在 Rails4 中仅显示特定子域 URL 上的文本?

ruby-on-rails - Rails 5 Eager load 然后 find_by

ruby-on-rails - Ruby on Rails 的每个 do 方法。

sql - 子查询返回多列 - 或近似值

ruby-on-rails - Rails - 创建 protected 默认类别

jquery - 使用 jquery 在 ruby​​ on Rails 中进行动态选择

ruby-on-rails - gulp-ruby-sass 无法导入文件

ruby-on-rails - 无法加载 EventMachine C 扩展;使用纯 ruby react 器

SQL 选择多边形内的要素

postgresql - 左外连接 - 如何返回第二个表中存在的 bool 值?