【发布时间】:2019-01-06 17:08:07
【问题描述】:
我一直在数据库中使用状态对象来跟踪已加载到其中的种子数据。表结构为:
create_table "toolkit_states", force: :cascade do |t|
t.boolean "signups", default: true
t.decimal "database_version", precision: 5, scale: 2
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
seeds.rb 文件检查 database_version 并运行代码块,然后在运行代码块后设置 database_version。从 0.1 到 0.55 版本都运行良好。
我添加了一个新的种子数据块。要运行该块,请检查 database_version,它应该是 0.56。以下比较不起作用:
if state.database_version == 0.56
由于某种原因,无法评估数字 0.56 是否与存储在数据库中的值相等。它适用于高达 0.56 的所有值。
这是一个 Rails 控制台会话:
irb(main):001:0> state = ToolkitState.first
ToolkitState Load (0.4ms) SELECT "toolkit_states".* FROM "toolkit_states" ORDER BY "toolkit_states"."id" ASC LIMIT $1 [["LIMIT", 1]]
=> #<ToolkitState id: 1, signups: false, database_version: 0.56e0, created_at: "2018-12-27 17:04:50", updated_at: "2018-12-27 17:04:56">
irb(main):002:0> state.database_version == 0.56
=> false
irb(main):003:0> state.database_version == 0.56e0
=> false
irb(main):004:0> state.database_version == 0.56.to_f
=> false
irb(main):005:0> state.database_version.to_f == 0.56
=> true
当我用“to_f”转换值时,比较有效。我的问题是,如果没有这个转换到 0.56 的值,它也能正常工作
【问题讨论】:
标签: ruby-on-rails ruby