J'essaie de comprendre comment mettre en page ma base de données pour un site sur lequel je travaille. Voici mes modèles:Quand utiliser les documents incorporés?
class User
include MongoMapper::Document
// keys here
many :items
many :likes
end
class Item
include MongoMapper::Document
key :name, String, :required => true
many :likes
end
class Like
include MongoMapper::EmbeddedDocument
key :user_id, String, :required => true
end
je crois que le Like
devrait être quelque part noyé, mais je vais avoir du mal à choisir une en raison de la fonctionnalité que je voudrais sortir.
user = User.first
user.likes // should print out all the Items he liked
item = Item.first
item.likes // so I can count how many people like that item
Bien que le problème vient lorsque vous utilisez un EmbeddedDocument, vous perdez la find
, et d'autres méthodes utiles, et vous pouvez pas l'avoir embarqué dans les deux modèles. Donc, avoir seulement dans Item
, je aurais besoin d'exécuter ce (mais ne peut pas):
item = Item.first
item.likes.find_by_user_id(User.first._id)
méthode non définie find_by_user_id
sera lancé. Donc, si je devais incorporer cela dans mon User
, je ne pouvais toujours pas faire cela.
likes = Like.all // will throw undefined `all`
Alors je suis venu à la conclusing faire peut-être de cette façon:
class Like
include MongoMapper::Document
key :user_id, String, :required => true
key :item_id, String, :required => true
belongs_to :user
belongs_to :item
end
Mais cela semble que je suis en train de faire des choses encore à l'ancienne MySQL. Quelqu'un pourrait-il me donner un point sur la façon la plus probable de coder ceci avec MongoMapper?
Merci d'avance!
Cela ne semble être la solution de fortune pour l'instant, je vais laisser cela courir quelques jours de plus pour voir si j'obtiens plus de réponses avant de choisir ceci comme réponse choisie! Merci! – Garrett
Après un peu plus d'enquête, j'ai découvert que John a ouvert un problème sur GitHub pour un reverse inverse plus approprié de la relation 'many: in', donc ça arrive bientôt aussi. Cela n'aide pas si vous avez besoin d'enregistrer des informations dans le 'Like'. – Emily
Les problèmes de MongoMapper ne sont plus suivis sur Github, mais ils utilisent Pivotal Tracker, ici: http://www.pivotaltracker.com/projects/33576 En fait, PivotalTracker est une application de gestion de projet Agile, non destinée au suivi des problèmes, donc Je pense que c'est un mauvais choix de la part des développeurs MongoMapper. –