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?

¿Fue útil?

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ó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top