Điều gì inverse_of
có nghĩa là trong các hiệp hội mongoid? Những gì tôi có thể nhận được bằng cách sử dụng nó thay vì chỉ liên kết mà không có nó?What inverse_of có nghĩa là gì trong mông cổ?
Trả lời
Trong một mối quan hệ đơn giản, hai mô hình chỉ có thể liên quan theo một cách duy nhất và tên của mối quan hệ tự động là tên của mô hình mà nó liên quan đến. Điều này là tốt trong hầu hết các trường hợp, nhưng không phải lúc nào cũng đủ.
inverse_of
cho phép bạn chỉ định mối quan hệ mà bạn đang đề cập đến. Điều này rất hữu ích trong trường hợp bạn muốn sử dụng tên tùy chỉnh cho các mối quan hệ của bạn. Ví dụ:
class User
include Mongoid::Document
has_many :requests, class_name: "Request", inverse_of: :requester
has_many :assignments, class_name: "Request", inverse_of: :worker
end
class Request
include Mongoid::Document
belongs_to :requester, class_name: "User", inverse_of: :requests
belongs_to :worker, class_name: "User", inverse_of: :assignments
end
Trong ví dụ này, người dùng có thể vừa yêu cầu vừa được chỉ định vé. Để đại diện cho hai mối quan hệ riêng biệt này, chúng ta cần định nghĩa hai quan hệ với cùng một mô hình nhưng với các tên khác nhau. Sử dụng inverse_of
cho phép Mongoid biết rằng "yêu cầu" đi cùng với "người yêu cầu" và "bài tập" đi cùng với "công nhân". Lợi thế ở đây là gấp đôi, chúng ta có thể sử dụng các tên có ý nghĩa cho quan hệ của chúng ta, và chúng ta có thể có hai mô hình liên quan theo nhiều cách. Xem tài liệu Mongoid Relations để biết thêm thông tin chi tiết.
Vì vậy, tôi không cần '' 'nghịch đảo của ''' nếu chỉ có một quan hệ với tên tùy chỉnh nhưng tôi cần trong trường hợp có hai quan hệ với tên tùy chỉnh? Tôi bây giờ trong ActiveRecord '' 'inverse_of''' làm điều khác nhau. – freemanoid
Có, đối với một mối quan hệ đơn lẻ với tên tùy chỉnh, bạn chỉ cần sử dụng 'class_name' (trong cả Bản ghi Hoạt động và Mongoid). Nếu 'users' và' requests' có liên quan nhiều hơn một cách, 'inverse_of' là cách duy nhất Mongoid (và Active Record) có thể biết bạn đang nhắc đến cái nào. – XanderStrike