gpt4 book ai didi

ruby-on-rails - Rails - Mongoid : newly added fields in model giving nil for old data objects

转载 作者:可可西里 更新时间:2023-11-01 09:32:31 26 4
gpt4 key购买 nike

我有如下模型:

class User
include Mongoid::Document
field :name
end

将一些用户对象保存到数据库后,我添加了更多字段:

class User
include Mongoid::Document
include Mongoid::Timestamps::Created
field :name
field :birthdate
end

现在,我希望我可以使用以下代码段:

@user = User.all
@user.each do |u|
puts u.name
puts u.birthdate.strftime(#someFormat)
puts u.created_at.strftime(#someFormat)
end

不幸的是,因为我的旧 user 对象没有 birthdate 键,我收到这个错误:strftime called on nil class

问题:

  • 如何使用 Mongoid 处理此类情况?在 MySQL 中,当添加一个列时,它也会被添加到旧行中。但如果我在 MongoDB 中看到,它不会添加新字段作为旧数据的键。
  • created_at 字段也存在此问题,因为旧数据也没有该字段。

我正在寻找解决这个问题的好方法,每次检查 nil 条件不是一个可扩展的选项,因为字段的数量会继续增加。

最佳答案

您还可以为新字段添加默认值,这将为所有旧记录提供备用值。

class User
include Mongoid::Document
include Mongoid::Timestamps::Created

field :name
field :birthdate, :type => Date, :default => Date.new(1970,1,1)
end

您可以更新缺少 created_at 值的模型,但只需在您的 Rails 控制台中运行一些简单的东西:

User.all.each{ |u| u.update_attributes(:created_at => Time.now) if u.created_at.nil? }

关于ruby-on-rails - Rails - Mongoid : newly added fields in model giving nil for old data objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438776/

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