【问题标题】:In Mongoid how can I use "created_at" as my own attribute?在 Mongoid 中,我如何使用“created_at”作为我自己的属性?
【发布时间】:2015-10-16 03:48:35
【问题描述】:

我正在开发用于数据馈送的 Mongo 文档存储(在 Ruby 中使用 Mongoid)。提要本身有一组已创建和上次更新的字段。我想将它们作为“created_at”和“updated_at”存储在我的 Mongoid 文档中,但 Mongoid 内部不喜欢将它们作为我自己的显式属性,因为它们是您在 a 上声明“include 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 对象,即使我已经将它定义为一个字符串。

我欢迎任何建议。

【问题讨论】:

  • 我想将它们存储为字符串,仅此而已。所以我不想使用 Mongoid::Timestamps 但是当我将“created_at”作为字段名时,它会发生冲突。
  • 嗨 mu... 这就是我遇到的问题。我不包括 Mongoid::Timestamps 并且只是将 created_at 声明为 String 字段,但在 Mongoid 中它仍然存在问题(如上面的错误),因为它仍然希望将其视为日期/时间对象,而不是像这样的字符串我已经宣布了。我现在认为这只是 Mongoid 中的一个错误,没有任何解决方法......除了将字段命名为“created_at”以外的其他名称

标签: mongodb mongoid


【解决方案1】:

我终于明白了。

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

其次,原来问题是因为时间戳为字符串类型的对象是嵌入对象,但我忘了做“embedded_in”反向关系。完成后,一切正常。

所以这最终只是我没有正确理解嵌入关系的问题。我会把它留给其他人可以从中受益的机会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2013-06-19
    • 2019-08-27
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    相关资源
    最近更新 更多