Max*_*nko 6 ruby default ruby-on-rails mongodb mongoid
mongoid 4.0.2
我Test上课了:
class Test
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Paranoia
field :successful, type: Boolean, default: false
default_scope ->{ where(successful: true) }
end
Run Code Online (Sandbox Code Playgroud)
然后我做:
t=Test.new; t.successful
=> true
Run Code Online (Sandbox Code Playgroud)
所以这就是问题:这种行为背后的原因是什么?
PS我已经修复了它successful在after_initialize方法的帮助下重置.
尝试调用Test.create(),成功也会是true。这看起来很奇怪,但想想你在 default_scope 中所说的...得到所有正确的测试。
这看起来像最初来自 active_record 的东西:rails3 default_scope 和迁移中的默认列值,但是严格遵循 active_record 这应该可以工作,但它不能:
t= Test.unscoped.new; t.successful
=> true
Run Code Online (Sandbox Code Playgroud)
在 mongo 世界中,如果您设置 default_scope,它将使用该范围来限制所有对象,并假设您希望任何新内容也具有相同的默认值。解决方法是使用回调。您提到连接 after_initialize 这是一个不错的选择,但是您需要确保检查它是否已实际设置。另一种选择是使用命名范围而不是默认范围。
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |