rtd*_*tdp 5 ruby-on-rails mongodb mongoid ruby-on-rails-3
我的模型如下:
class User
include Mongoid::Document
field :name
end
Run Code Online (Sandbox Code Playgroud)
将一些用户对象保存到数据库后,我添加了更多字段:
class User
include Mongoid::Document
include Mongoid::Timestamps::Created
field :name
field :birthdate
end
Run Code Online (Sandbox Code Playgroud)
现在,我希望可以使用以下代码片段:
@user = User.all
@user.each do |u|
puts u.name
puts u.birthdate.strftime(#someFormat)
puts u.created_at.strftime(#someFormat)
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,因为我的旧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
Run Code Online (Sandbox Code Playgroud)
您可以更新缺少值的模型created_at,但只需在 Rails 控制台中运行一些简单的操作即可:
User.all.each{ |u| u.update_attributes(:created_at => Time.now) if u.created_at.nil? }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5106 次 |
| 最近记录: |