3

我对 mongomapper 关联有疑问。我有一个类名用户和另一个命名模型。用户有很多型号,但...

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

我做错了什么?

4

3 回答 3

5

看来 MM 不再对 FK 列使用 String 格式,所以

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 作为字符串,但是当我在重建数据库时切换它时它只会“接受”。幸运的是,我正在处理测试数据,所以这很容易。

于 2010-01-08T20:56:03.823 回答
0

你得到什么样的错误或异常?您发布的代码看起来不错。

于 2010-01-07T22:24:12.683 回答
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']

希望有帮助。

于 2011-09-27T14:18:57.107 回答