Подтвердить что ты не робот

Что обратное имеет значение в мангоиде?

Что означает inverse_of в союзах с mongoid? Что я могу получить, используя его вместо простой ассоциации без него?

4b9b3361

Ответ 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.