使用常规持久性方法通过mongoid更新Rails模型的属性

时间:2017-02-23 18:30:13

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

我现在一直在追逐一个问题,但仍然无法弄清楚发生了什么。我无法通过常规持久性方法编辑由我的gem制作的文档,例如update,甚至只编辑属性并调用save

例如,呼叫:

Scram::Policy.where(id: a.id).first.update!(priority: 12345)

根本不起作用(没有错误,但文档没有更新)。但以下内容可行:

Scram::Policy.collection.find( { "_id" => a.id } ).update_one( { "$set" => {"priority" => 12345}})

我不确定我做错了什么。调用更新并保存在任何其他模型上工作正常。有问题的文件来自我的宝石:https://github.com/skreem/scram/blob/master/lib/scram/app/models/policy.rb

我无法编辑其嵌入文档(目标)。我尝试删除store_in宏,并准确指定在假应用中使用inverse_ofclass_name来使用哪个类来重新实现这些类:https://github.com/skreem/scram-implementation/blob/master/lib/scram/lib/scram/app/models/policy.rb

我已经尝试将整个宝石重新实现为干净的假铁路应用程序:https://github.com/skreem/scram-implementation

在rails控制台中运行这些演示如何更新不起作用: https://gist.github.com/skreem/c70f9ddcc269e78015dd31c92917fafa

这是关于嵌入式文档的mongoid的问题,还是我的代码中缺少一些小的复杂性?

修改 如果您从我的gem(scram)的根目录运行irb然后运行以下命令,问题仍然存在:

require "scram.rb"
Mongoid.load!('./spec/config/mongoid.yml', :test)

Scram::Policy.first.update!(priority: 32) #=> doesn't update the document at all

Scram::Policy.where(id: "58af256f366a3536f0d54a61").update(priority: 322) #=> works just fine

奇怪的是,以下情况并不奏效: Scram::Policy.where(id: "58af256f366a3536f0d54a61").first.update(priority: 322)

似乎first没有检索到我想要的内容。进行相等比较表明第一个文档等于where查询返回的第一个文档。

0 个答案:

没有答案