我有一个Rails应用程序,我试图在Model类中迭代每个对象,具体取决于对象是否已存档。
class Model
include Mongoid::Document
include Mongoid::Timestamps
field :example_id, type: Integer
field :archived, type: Boolean, default: false
def archive_all
Model.all.where(archived: false).each do |m|
m.archive!
end
end
end
但是,where子句没有返回任何内容。当我进入控制台并输入这些行时,我得到的是:
Model.where(example_id: 3).count #=> 23
Model.where(archived: false).count #=> 0
Model.all.map(&:archived) #=> [false, false, false, ...]
我在整个应用程序中有其他where子句,它们似乎工作正常。如果它有所不同,那么'archived'字段就是我刚刚添加的字段。
这里发生了什么?我做错了什么?
答案 0 :(得分:0)
当你说:
Model.where(archived: false)
您正在MongoDB中查找archived
字段正好是false
的文档。如果你刚刚添加了archived
字段,那么数据库中的所有文档都不会包含该字段(不,:default
无关紧要)因此archived: false
不会有任何文档}。您可能最好寻找archived
不是true
的文档:
Model.where(:archived.ne => true).each(&:archive!)
您可能希望在archived
上添加验证,以确保它始终为true
或false
并且每个文档都包含该字段。