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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top