Quoi inverse_of
signifie-t-il dans les associations mongoles ? Qu'est-ce que je peux obtenir en l'utilisant au lieu d'une simple association sans elle ?
Réponse
Trop de publicités?Dans une relation simple, deux modèles ne peuvent être liés que d'une seule manière, et le nom de la relation est automatiquement le nom du modèle auquel elle est liée. Cela convient dans la plupart des cas, mais n'est pas toujours suffisant.
inverse_of
vous permet de préciser la relation à laquelle vous vous référez. Ceci est utile dans les cas où vous souhaitez utiliser des noms personnalisés pour vos relations. Par exemple :
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
Dans cet exemple, les utilisateurs peuvent à la fois demander et être affectés à des tickets. Afin de représenter ces deux relations distinctes, nous devons définir deux relations sur le même modèle mais avec des noms différents. Utilisation de inverse_of
permet à Mongoid de savoir que les "requêtes" vont avec "requester" et que les "assignations" vont avec "worker". L'avantage est double : nous pouvons utiliser des noms significatifs pour notre relation et nous pouvons avoir deux modèles liés de plusieurs façons. Consultez la page Relations mongoles pour des informations plus détaillées.