Что означает inverse_of
в союзах с mongoid? Что я могу получить, используя его вместо простой ассоциации без него?
Что обратное имеет значение в мангоиде?
Ответ 1
В простом отношении две модели могут быть связаны только одним способом, а имя отношения - это автоматически имя модели, к которой она относится. Это нормально в большинстве случаев, но этого не всегда достаточно.
inverse_of
позволяет указать отношение, к которому вы обращаетесь. Это полезно в тех случаях, когда вы хотите использовать собственные имена для своих отношений. Например:
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
В этом примере пользователи могут запросить и назначить билеты. Чтобы представить эти два разных отношения, нам нужно определить два отношения к одной и той же модели, но с разными именами. Использование inverse_of
позволяет Mongoid знать, что "запросы" идут с "реквестером", а "присваивания" - с "рабочим". Преимущество здесь двоякое, мы используем значимые имена для нашего отношения, и мы можем иметь две модели, связанные несколькими способами. Подробную информацию можно найти в документации Mongoid Relations.