在Mongoid中如何使用“created_at”作为我自己的属性?

时间:2015-07-25 15:20:55

标签: mongodb mongoid

我正在开发一个Mongo文档存储库来处理数据(使用Ruby中的Mongoid)。 Feed本身具有已创建且最后更新的字段集。我想将它们作为“created_at”和“updated_at”存储在我的Mongoid文档中,但是Mongoid内部不喜欢将它们作为我自己的显式属性,因为当你声明“包含Mongoid :: Timestamps”时它们是字段名称文档。

有没有办法使用“created_at”和“updated_at”作为我自己的字段?或者我是否需要试图找出这些字段的不同名称?

我尝试定义这些字段,它在首次创建文档时有效,但是当我更新文档时,我得到的结果如下:

/mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic/modifiers.rb:121:in `add_operation': undefined method `each' for "2015-05-18 14:55:07":String (NoMethodError)
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic/modifiers.rb:87:in `block in set'
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic/modifiers.rb:84:in `each_pair'
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic/modifiers.rb:84:in `set'
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic.rb:353:in `generate_atomic_updates'
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic.rb:134:in `block in atomic_updates'
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic.rb:132:in `each'
from /mnt/task/__gems__/gems/mongoid-4.0.2/lib/mongoid/atomic.rb:132:in `atomic_updates'

换句话说,它试图对字符串进行迭代,可能是因为在Mongoid中它“相信”它是一个Date对象,即使我已将它定义为String。

我欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

我终于想通了。

首先,如果您想手动而不是自动设置created_at或updated_at,可以在对象上设置它们,然后使用“timeless.save”而不是“save”。

其次,事实证明问题是因为时间戳为String类型的对象是嵌入对象,但我忘了执行“embedded_in”反向关系。一旦完成,一切都有效。

所以这最终只是我不能正确理解嵌入式关系的问题。我会把这个留给别人可以从中受益的机会。

相关问题