2010-01-07 93 views
3

我有mongomapper协会的问题。我有一个类名为User和其他名为Model的类。用户有很多车型,但...MongoMapper has_many协会

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 

类代码(简化):

class User 
    include MongoMapper::Document 

    # some keys definition 

    many :models 
end 

class Model 
    include MongoMapper::Document 

    # some keys definitions 

    belongs_to :user 
end 

我做错了吗?

回答

5

似乎MM不再使用字符串格式的FK列,因此

Model.find_by_user_id(user.id.to_s) 

应该是

Model.find_by_user_id(user.id) 

此外,Model.user_id列的数据类型应设置为

key :user_id, Mongo::ObjectID 

当我遇到这个问题时,我不得不删除并重新创建我的集合以获得它工作 - 换句话说,我曾经把user_id当作一个字符串,但是当我重建我的数据库时,它只会“切换”它。幸运的是,我正在处理测试数据,这很简单。

0

你得到了什么样的错误或例外?你发布的代码看起来很好。

+0

我没有得到任何错误。只是user.models是空数组?我编辑了我的问题,在第一个版本中我错过了这个,对不起 – Sebastian

0

啊,这在mm文档中记录很少。你需要做的:

# 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'] 

希望这有助于:

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 

您可以然后通过添加模型到用户。