associazione has_many MongoMapper
-
19-09-2019 - |
Domanda
Ho problemi con le associazioni MongoMapper. Ho una classe nomi utente e altre chiamato modello. L'utente ha molti modelli, ma ...
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
Codice classe (semplificato):
class User
include MongoMapper::Document
# some keys definition
many :models
end
class Model
include MongoMapper::Document
# some keys definitions
belongs_to :user
end
Quello che sto facendo male?
Soluzione
Sembra che MM non utilizza il formato stringa per la colonna FK, quindi
Model.find_by_user_id(user.id.to_s)
dovrebbe essere
Model.find_by_user_id(user.id)
Inoltre, il tipo di dati della colonna Model.user_id dovrebbe essere impostato
key :user_id, Mongo::ObjectID
Quando mi sono imbattuto in questo problema, ho dovuto eliminare e ricreare la mia collezione per farlo lavoro-in altre parole che ho usato per avere ID_utente come String, ma sarebbe solo "prendere" quando sono passato quando ho ricostruito il mio database. Per fortuna sto lavorando con i dati di test così che era abbastanza facile.
Altri suggerimenti
Che tipo di errori o eccezioni state ottenendo? Il codice che hai postato sembra a posto.
ah, questo è scarsamente documentata nella documentazione di mm. Hai bisogno di fare questo qui:
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
È quindi possibile aggiungere modelli per l'utente tramite:
# 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']
La speranza che ha aiutato.