Ruby on rails Mongoid默认范围覆盖默认值。为什么?
mongoid 4.0.2 我有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;
测试
课程:
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当然,现在修复了,我的错。