En los documentos se dice que usted puede utilizar inverse_of: cero, pero en realidad no se describe el caso de uso: http://mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many¿Cuáles son las ventajas y desventajas de la utilización de has_and_belongs_to_many MongoId con inverse_of
Estoy asumiendo que es útil en el caso donde un objeto tendría MUCHO del otro, entonces usted puede saltear ese lado completamente con inverse_of nil y ahorrar algo de espacio de almacenamiento ¿no?
Así, por ejemplo:
class Post
has_and_belongs_to_many :tags
end
class Tag
has_and_belongs_to_many :posts, inverse_of: nil
end
Una fuerza etiqueta pertenece a cientos o miles de mensajes, pero un post probablemente sólo tiene 5 o más etiquetas.
¿Es este un buen caso de uso para él? Asumo que todavía puede hacer
tag.posts
etc como normal, y la principal solución de compromiso es que cambia la consulta de:
Post.find(tag.post_ids)
en
Post.where(tag_ids: tag.id)
Si usted tiene un índice en tag_ids parece que todavía sería bastante rápido. Así que tal vez lo mejor es algo así como:
class Post
has_and_belongs_to_many :tags, index: true
end
class Tag
has_and_belongs_to_many :posts, inverse_of: nil
end
Sólo quiero comprobar mi pensamiento.
Ok impresionante, esto tiene más sentido ahora lo que entiende por un solo lado - no lo hace la configuración HABTM en el otro lado. Gracias @rubish ¡Realmente lo aprecio! –
Solo para hacer un seguimiento ... ¿sabes si hay una manera fácil de configurar los métodos de acceso en el lado 'Tag '. Empecé a definir mi propia 'def postes',' def posts = 'etc. pero me di cuenta de que hay bastantes más como' << ',' push', y las devoluciones de llamada posteriores cuando una publicación se destruye, etc. Imaginé que podría haber una manera más fácil. ¡Gracias! –
@BrianArmstrong Lo siento, pero no conozco una salida fácil. Aunque puedes probar la lista de correo de mongoid. – rubish