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

时间:2015-10-07 14:15:13

标签: ruby-on-rails ruby mongodb mongoid default

mongoid 4.0.2

我有INPC(AllOptionsSet)课程:

Test

然后我这样做:

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

  field :successful,      type: Boolean, default: false

  default_scope  ->{ where(successful: true) }
end

所以这就是问题:这种行为背后的原因是什么?

P.S。我已修复它在t=Test.new; t.successful => true 方法的帮助下重置successful

1 个答案:

答案 0 :(得分:1)

尝试调用Test.create(),成功也是如此。这看起来很奇怪,但想想你在default_scope中说的话......得到所有真实的测试。

这看起来像是来自active_record的内容:rails3 default_scope, and default column value in migration然而严格遵循active_record这应该有效,但它没有:

stateA.list

在mongo世界中,如果你使用default_scope,它将使用该范围对所有对象进行范围化,并假设您希望任何新的对象具有相同的默认值。解决方法是使用回调。你提到连接after_initialize这是一个不错的选择,但是你需要确保检查它是否已经实际设置。另一种方法是使用命名范围而不是默认范围。