MongoMapper has_many关联

时间:2010-01-07 22:12:28

标签: ruby-on-rails ruby mongodb mongomapper

我对mongomapper关联有问题。我有一个类名User和其他名为Model的。用户有很多型号,但......

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

我做错了什么?

3 个答案:

答案 0 :(得分:5)

看来MM不再使用String格式作为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作为一个字符串,但只有当我重建时切换它时它才会“占用”我的数据库。幸运的是我正在处理测试数据,这很容易。

答案 1 :(得分:0)

您遇到了哪些错误或异常?你发布的代码看起来很好。

答案 2 :(得分:0)

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

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

然后,您可以通过以下方式向用户添加模型:

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

希望有所帮助。