我正在使用Rails和mongoid来使用mongodb。
使用Active:Record时,通常在rails中,您可以访问方法.toggle!它只是允许你反转数据库中布尔字段的值。
不幸的是,这种方法不适用于mongoDB:
user = User.first
user.toggle!(:admin)
NoMethodError: undefined method `toggle!' for #<User:0x00000100eee700>
这很不幸......而且愚蠢的我没有看到如何在没有复杂代码的情况下出行......
关于如何简明扼要地获得相同结果的任何建议?
谢谢,
Alex
ps:其中一个问题是,当我想要修改字段时,它会再次通过验证...而且它要求:密码我没有保存在db中,所以:
User.first.admin = !User.first.admin
甚至不起作用:(
答案 0 :(得分:6)
这里的问题特别是mongoid,而不是mongodb。 toggle!
是ActiveRecord::Base的一部分,但幸运的是,复制起来并不难。
def toggle!(field)
send "#{field}=", !self.send("#{field}?")
save :validation => false
end
将其添加到模型中(或将其添加到模块中,并将其包含在模型中),您的Mongoid模型将获得与您在AR中习惯相同的功能。它将读取字段的值,反转它,写入它(通过setter,根据toggle!
文档),然后保存文档,绕过验证。
答案 1 :(得分:1)
class FooWrapper {
// ...
public:
void DoAllFoos();
private:
std::vector<std::unique_ptr<CommonBase> > bases_;
}
void FooWrapper::DoAllFoos()
{
for(auto& base: bases)
base->DoFoo();
}
答案 2 :(得分:0)
好的,验证因类型不起作用,代码应为:
save :validate => false (not :validation)