#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. Большое вам спасибо! Это было именно так!