Mongoid, не можете заставить работать с версиями встроенный документ? - PullRequest
1 голос
/ 28 января 2011

Что мне здесь не хватает?

У меня есть относительно простая структура:

Class Content 
  include Mongoid::Document 
   include Mongoid::Timestamps 
   include Mongoid::Paranoia 
    field :title 
    embeds_many :localized_contents 
 end 

 Class LocalizedContent 
   include Mongoid::Document 
   include Mongoid::Timestamps 
   include Mongoid::Paranoia 
   include Mongoid::Versioning 
    field :locale 
    field :content 
    embedded_in :content, :inverse_of => :localized_contents 
 end 

, если я делаю:

 test = LocalizeContent.new(:locale => 'en', :content => 'blah') 
 test.save 

 => ok, version = 1 

 test.content = 'blah2' 
 test.save 

 => ok, version = 2, versions.count = 1, etc. 

Все в порядке

Теперь, если я сделаю эточерез контент он не работает

 test = Content.first.localised_contents.build(:locale => 'en', :content => 'blah') 
 test.save 

 => ok, version = 1 

 test = Content.first.localized_contents.first 
 test.content = 'blah2' 
 test.save 

 => KO, version = 1, versions.count = 0, but 
 Content.first.localized_contents.first.content == 'blah2' 

Что я тут не так делаю?!?

Спасибо, Алекс

Ответы [ 2 ]

0 голосов
/ 31 июля 2013

Я использую mongo (1.9.1) & mongoid (2.7.1) и, кажется, есть способ заставить версии встроенных документов быть версионными.

Это своего рода хаккей - но в основном мы меняем вложенный документ, а затем обновляем поле 'previous_update' родительского документа.

params = { 'env_name' => 'changeme-qa', 'machine' => {'_id' =>"51f85846f0e1801113000003", 'status' => "described#{version}" }}

env = Environment.find_with_name(params['env_name'])
result = env.machines.where(:_id => params['machine']['_id'])
machine = (result.exists?) ?  machine = result.first : nil

if machine.nil?
  raise 'failed to find machine'
else
  if machine.update_attributes(params['machine'])
    env.reload 
    # here's the magic, since we cause a change in the parent (environment) record,
    # the child records get versioned
    env['previous_update'] = env['updated_at']
    env.save
  else
    raise 'failed to save'
  end
end
0 голосов
/ 26 сентября 2011

Mongoid :: Управление версиями и Mongoid :: Паранойя, к сожалению, в настоящее время не работает со встроенными документами.

...