使用mongdb更新简单的布尔数据?

Ale*_*lex 6 boolean ruby-on-rails toggle mongodb mongoid

我正在使用Rails和mongoid与mongodb一起工作.

使用Active:Record时,通常在rails中,您可以访问方法.toggle!它只允许您反转数据库中布尔字段的值.

不幸的是,这种方法不适用于mongoDB:

user = User.first
user.toggle!(:admin)
NoMethodError: undefined method `toggle!' for #<User:0x00000100eee700>
Run Code Online (Sandbox Code Playgroud)

这是不幸的......而且愚蠢到我没有看到如何在没有复杂代码的情况下出行......

关于如何简明扼要地获得相同结果的任何建议?

谢谢,

亚历克斯

PS:还存在的问题之一是,当我要修改字段,它经历再次验证...并且它要求的:密码,我不会在数据库保存,那么:

User.first.admin = !User.first.admin
Run Code Online (Sandbox Code Playgroud)

甚至不会工作:(

Chr*_*ald 6

这里的问题特别是mongoid,而不是mongodb.toggle!ActiveRecord :: Base的一部分,但幸运的是,它并不难复制.

def toggle!(field)
  send "#{field}=", !self.send("#{field}?")
  save :validation => false
end
Run Code Online (Sandbox Code Playgroud)

将其添加到模型中(或将其添加到模块中,并将其包含在模型中),您的Mongoid模型将获得与您在AR中习惯相同的功能.它将读取字段的值,反转它,写入它(通过setter,根据toggle!文档),然后保存文档,绕过验证.