我有如下模型:
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。
问题:
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/