Ruby on rails Mongoid默认范围覆盖默认值。为什么?

Ruby on rails Mongoid默认范围覆盖默认值。为什么?,ruby-on-rails,ruby,mongodb,mongoid,default,Ruby On Rails,Ruby,Mongodb,Mongoid,Default,mongoid 4.0.2 我有测试课程: class Test include Mongoid::Document include Mongoid::Timestamps include Mongoid::Paranoia field :successful, type: Boolean, default: false default_scope ->{ where(successful: true) } end 那么我会: t=Test.new;

mongoid 4.0.2

我有
测试
课程:

class Test
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia

  field :successful,      type: Boolean, default: false

  default_scope  ->{ where(successful: true) }
end
那么我会:

t=Test.new; t.successful
=> true
所以问题是:这种行为背后的原因是什么?

p.S.我已经修复了在初始化后使用
方法重置
成功的问题。

尝试调用Test.create(),成功也将为真。这看起来很奇怪,但是想想你在默认范围内说的话。。。获取所有正确的测试

这看起来像是最初从active_record中获得的:但是严格遵循active_record,这应该可以工作,但是它不能:

t= Test.unscoped.new; t.successful
=> true

在mongo世界中,如果你设置了一个默认的_作用域,它将用它来作用于所有对象,并假设你希望任何新的东西也有相同的默认值。解决方法是使用回调。您提到了连接after_initialize,这是一个很好的选择,但是您需要确保检查它是否已实际设置。另一种选择是使用命名范围,而不是默认范围

这听起来像个虫子。你确认是
默认范围
造成的吗?@Drenmi当我删除带有默认范围的行时,一切都正常,所以我想是的。@muistooshort t当然,现在修复了,我的错。