Переименование поля в Mongoid не обновляет поле в классе - PullRequest
0 голосов
/ 28 ноября 2018

Когда я переименовываю поле в Mongoid, оно успешно обновляет поле в MongoDB, но не обновляет поле в коде рубина:

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 не отражаются в классеопределение?

1 Ответ

0 голосов
/ 28 ноября 2018

Когда вы запускаете #rename, вы взаимодействуете с MongoDB.Изменение структуры документа сохраняется в базе данных.Этот метод не взаимодействует с исходным кодом ruby, вам нужно отредактировать его самостоятельно.

Кстати.Я не могу вспомнить ни один метод ruby ​​/ rails (кроме методов в задачах и генераторах rake), который взаимодействует с исходным кодом, хранящимся в файлах.

...