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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top