MongoMapper asociación has_many
-
19-09-2019 - |
Pregunta
Tengo un problema con las asociaciones MongoMapper. Tengo una clase nombres de usuario y otro modelo llamado. El usuario tiene muchos modelos, pero ...
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
código Class (simplificada):
class User
include MongoMapper::Document
# some keys definition
many :models
end
class Model
include MongoMapper::Document
# some keys definitions
belongs_to :user
end
Lo que estoy haciendo mal?
Solución
Parece que MM ya no se utiliza el formato de cadena para la columna de FK, de modo
Model.find_by_user_id(user.id.to_s)
debería ser
Model.find_by_user_id(user.id)
Además, el tipo de datos de la columna de Model.user_id debe ajustarse a
key :user_id, Mongo::ObjectID
Cuando me encontré con este problema, tuve que eliminar y volver a crear mi colección de conseguir que de obra en otras palabras, que solía tener USER_ID como una cadena, pero sólo "tomará" cuando cambié cuando reconstruí mi base de datos. Por suerte estoy trabajando con datos de prueba, así que fue bastante fácil.
Otros consejos
¿Qué tipo de errores o excepciones te va? El código que envió ve bien.
ah, esto no está bien documentado en la documentación mm. Es necesario hacer esto aquí:
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
A continuación, puede añadir modelos a su usuario a través de:
# 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 esperanza que nos ayudó.