gpt4 book ai didi

ruby-on-rails - 具有可能不同类型 mongoid 的字段

转载 作者:太空宇宙 更新时间:2023-11-03 18:16:06 24 4
gpt4 key购买 nike

在我的模型中我有

field :is_open, type: Time, default: nil

但是之前在同一模型中,我将此类型存储为 bool 值。我现在想将其更改为键入时间。对于我数据库中的新项目,这工作正常,但是对于仍然存储为 bool 值的旧记录,当我尝试访问此属性时

modelInstance.is_open

我收到以下错误:

#<NoMethodError: undefined method `getlocal' for true:TrueClass>

不是将我的 mongo 数据库中的所有 bool 值更改为 Time 对象,有没有一种方法/ Hook 我可以在 mongo 上做,这样当从文档中提取这个属性时,我可以检查它是否是一个 bool 值并将其替换为时间戳?

最佳答案

您不必使用 Mongoid 指定字段类型。这意味着您可以执行以下操作:

class Model
include Mongoid::Document
field :f
end

像这样的数据:

> db.models.find()
{ "_id" : ObjectId(...), "f" : true }
{ "_id" : ObjectId(...), "f" : 6 }
{ "_id" : ObjectId(...), "f" : "pancakes" }

一切都会好起来的:

rails > Model.all.map { |m| puts "#{m.f.class} - #{m.f.inspect}" }
TrueClass - true
Float - 6.0
String - "pancakes"

因此,您可以从字段 中删除:type,一切都会正常进行。当然,如果您需要在等待时进行某种手动类型转换或检查,您可能希望提供自己的 def is_opendef is_open= 方法修复您的 MongoDB 数据。

关于ruby-on-rails - 具有可能不同类型 mongoid 的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com