associação has_many MongoMapper
-
19-09-2019 - |
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?
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.