Доступ к встроенному родительскому документу в движке rails mongoid

#ruby-on-rails #mongodb #mongoid

#ruby-on-rails #mongodb #mongoid

Вопрос:

Я нахожусь в процессе преобразования некоторого кода, который ранее работал без проблем, в движок с пространством имен rails, чтобы его можно было использовать повторно. Вот пример, который в настоящее время не работает для меня:

 module MyModule
  class School
    include Mongoid::Document
    
    embeds_one :student

  end
end

module MyModule
  class Student
    include Mongoid::Document
    
    embedded_in :school

  end
end
 

Однако, когда я создаю школу и назначаю ей ученика и пытаюсь получить доступ к его родительскому элементу через school свойство, он возвращает nil.

 school = MyModule::School.create
school.student = MyModule::Student.new
school.save!

school.student.school // return nil
school.student._parent // returns the school object
 

Что я делаю не так, что приводит school.student.school к возврату nil?

Ответ №1:

Вам не хватает имен классов в ассоциациях:

 module MyModule
  class School
    include Mongoid::Document
    
    embeds_one :student, class_name: 'MyModule::Student'

  end
end

module MyModule
  class Student
    include Mongoid::Document
    
    embedded_in :school, class_name: 'MyModule::School'

  end
end
 

Можно привести аргумент, что Mongoid должен выяснить это автоматически, хотя сложность здесь заключается в том, что когда загружается первая из моделей, другая еще не определена, и, следовательно, целевой класс может быть глобальным или в пространстве имен, а Mongoid не может узнать, какой из них правильный.

Комментарии:

1. Большое вам спасибо! Это было именно так!