Поскольку комментарий @mu слишком короткий, вам нужно указать class_name
вместе с определенными ассоциациями, если они не следуют соглашению. Вот как вы можете заставить его работать:
class Book
include Mongoid::Document
embeds_many :authors, class_name: 'Book::Author'
end
class Book::Author
include Mongoid::Document
# `embedded_in` will suit this relation better
embedded_in :book, inverse_of: :authors
embeds_many :bios, class_name: 'Book::Author::Bio'
end
class Book::Author::Bio
include Mongoid::Document
embedded_in :author, class_name: 'Book::Author', inverse_of: :bios
end
class Book::Author::Interest
include Mongoid::Document
# I don't see a relation `interests` anywhere in your models
belongs_to :author, class_name: 'Book::Author', inverse_of: :interests
end
Но я немного запутался, почему вы хотите хранить их таким образом. Почему автор должен быть встроен в книгу, поскольку один автор может иметь несколько книг? Я бы изменил структуру на что-то вроде:
class Book
include Mongoid::Document
has_and_belongs_to_many :authors
end
class Author
include Mongoid::Document
has_and_belongs_to_many :books
embeds_many :bios, class_name: 'Author::Bio'
embeds_many :interests, class_name: 'Author::Interest'
end
class Author::Bio
include Mongoid::Document
embedded_in :author, inverse_of: :bios
end
# Not exactly sure what this model is for, so with limited information, i will keep it under namespace `Author`.
class Author::Interest
include Mongoid::Document
embedded_in :author, inverse_of: :interests
end