Pergunta

Eu tenho problema com associações MongoMapper. Eu tenho uma classe nomes de usuário e outro modelo nomeado. O usuário tem muitos modelos, mas ...

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 (simplificado):

class User
  include MongoMapper::Document

  # some keys definition

  many :models
end

class Model
  include MongoMapper::Document

  # some keys definitions

  belongs_to :user
end

O que estou fazendo de errado?

Foi útil?

Solução

Parece que MM não usa formato de cadeia para a coluna FK, então

Model.find_by_user_id(user.id.to_s)

deve ser

Model.find_by_user_id(user.id)

Além disso, o tipo de dados da coluna Model.user_id deve ser definido para

key :user_id, Mongo::ObjectID

Quando eu corri para este problema, eu tive que apagar e recriar minha coleção para fazê-lo trabalho-em outras palavras, que eu costumava ter user_id como um String, mas só iria "tomar" quando eu mudei quando eu reconstruí meu banco de dados. Felizmente eu estou trabalhando com dados de teste para que foi bastante fácil.

Outras dicas

Que tipo de erros ou exceções que você está recebendo? O código que você postou parece bem.

ah, isso é mal documentado nos docs mm. Você precisa fazer isso aqui:

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

Você pode então adicionar modelos para o usuário 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 que ajudou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top