MongoMapper association has_many
-
19-09-2019 - |
Question
J'ai un problème avec les associations mongomapper. J'ai un nom de classe utilisateur et autre modèle nommé. L'utilisateur a de nombreux modèles, mais ...
user = User.first
=> <User ...
user.models
=> []
Model.find_by_user_id(user.id.to_s)
=> <Model ...
Model.find_by_user_id(user.id.to_s).user == user
=> true
Code de classe (simplifié):
class User
include MongoMapper::Document
# some keys definition
many :models
end
class Model
include MongoMapper::Document
# some keys definitions
belongs_to :user
end
Qu'est-ce que je fais mal?
La solution
Il semble que MM n'utilise plus String format pour la colonne FK, donc
Model.find_by_user_id(user.id.to_s)
doit être
Model.find_by_user_id(user.id)
En outre, le type de données de la colonne Model.user_id doit être réglé sur
key :user_id, Mongo::ObjectID
Quand je suis tombé sur ce problème, je devais supprimer et recréer ma collection pour l'obtenir à TRAVAiL-à-dire que je l'habitude d'avoir id_utilisateur comme une chaîne, mais il serait seulement « prendre » quand je suis passé quand je rebâti ma base de données. Heureusement, je travaille avec des données de test ce qui était assez facile.
Autres conseils
Quel genre d'erreurs ou d'exceptions que vous obtenez? Le code affiché semble bien.
ah, cela est mal documenté dans les docs mm. Vous devez faire ici:
class User
include MongoMapper::Document
# some keys definition
many :models, :in => :model_ids
end
class Model
include MongoMapper::Document
# some keys definitions
# no belongs_to necessary here
end
Vous pouvez ensuite ajouter des modèles à votre utilisateur via:
# use an existing object
u = User.create ...
m = Model.create ...
# and add the model to the user
u.models << m
# don't forget to save
u.save
# you can then check if it worked like so:
# u.model_ids => [ BSON::ID 'your user id']
Hope qui a aidé.