Tôi có một tình huống mà tôi có tài liệu gốc và tôi muốn có hai loại tài liệu nhúng khác nhau: một là cha mẹ và một tài liệu khác làm con với cha mẹ tùy chọn. Ví dụ:Mongoid: Cách triển khai mối quan hệ giữa các tài liệu được nhúng?
class ParentDoc
include Mongoid::Document
embeds_many :special_docs
embeds_many :special_doc_groupings
end
class SpecialDoc
include Mongoid::Document
embedded_in :parent_doc
belongs_to :special_doc_groupings
end
class SpecialDocGrouping
include Mongoid::Document
embedded_in :parent_doc
has_many :special_docs
end
Trong ví dụ này, SpecialDocs và SpecialDocGroupings có thể tồn tại mà không có mối quan hệ hoặc có thể có mối quan hệ cha-con.
Tuy nhiên, đây là một hiệp hội Mongoid không hợp lệ bởi vì chúng tôi nhận được lỗi này:
Mongoid::Errors::MixedRelations:
Problem: Referencing a(n) SpecialDoc document from the SpecialDocGrouping document via a relational association is not allowed since the SpecialDoc is embedded.
Summary: In order to properly access a(n) SpecialDoc from SpecialDocGrouping the reference would need to go through the root document of SpecialDoc. In a simple case this would require Mongoid to store an extra foreign key for the root, in more complex cases where SpecialDoc is multiple levels deep a key would need to be stored for each parent up the hierarchy.
Resolution: Consider not embedding SpecialDoc, or do the key storage and access in a custom manner in the application code.
tôi không thấy bất cứ điều gì sai trái với các loại hiệp hội mà tôi đang cố gắng để tạo ra, bên cạnh thực tế là nó là không được hỗ trợ bởi Mongoid.
Làm cách nào để tự mình triển khai loại kết hợp này?
yaa đúng của bạn, bạn không thể xác định loại như vậy của hiệp hội trong mongoid liên quan đến câu hỏi của bạn 'Tôi thực hiện loại hình này của hiệp hội bản thân mình?' Cũng đã nghe [mở rộng] (http://guides.rubyonrails.org/association_basics.html#extend) trong hiệp hội activerecord tốt, bạn có thể thực hiện một cái gì đó như thế hoặc sử dụng mở rộng nếu mongoid quá hỗ trợ một cái gì đó loại đó (tôi sẽ kiểm tra và cho bạn biết abt này) Chúc mừng – Viren