【发布时间】:2019-04-29 18:20:42
【问题描述】:
当我在 Mongoid 中重命名一个字段时,它成功更新了 MongoDB 中的字段,但它没有更新 ruby 代码中的字段:
class Example
include Mongoid::Document
field :apple, type: String, as: :c_apple
end
Example.all
=> #<Mongoid::Criteria
selector: {}
options: {}
class: Example
embedded: false>
Example.all.rename("apple" => "d_apple")
MOPED: 127.0.0.1:27017 UPDATE database=core collection=examples selector={} update={"$rename"=>{"apple"=>"d_apple"}} flags=[:multi]
COMMAND database=core command={:getlasterror=>1, :w=>1} runtime: 1.2460ms
=> {"connectionId"=>2, "updatedExisting"=>false, "n"=>0, "syncMillis"=>0, "writtenTo"=>nil, "err"=>nil, "ok"=>1.0}
e = Example.new
=> #<Example _id: 5bfdbf103ed1492f9a000001, apple(c_apple): nil>
e.d_apple
NoMethodError: undefined method `d_apple' for #<Example _id: 5bfdbf103ed1492f9a000001, apple(c_apple): nil>
为什么 MongoDB 中的更改没有反映在类定义中?
【问题讨论】:
-
“但它不会更新 ruby 代码中的字段”——事实上,这根本不是这个方法应该做的。
标签: ruby-on-rails ruby mongodb mongoid