草庐IT

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

coder 2023-10-30 原文

我有如下模型:

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/

有关ruby-on-rails - Rails - Mongoid : newly added fields in model giving nil for old data objects的更多相关文章

随机推荐