我有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

我在做什么错了?

有帮助吗?

解决方案

似乎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说明为String换句话说与工作,但它只是将“采取”当我打开它,当我重建我的数据库。幸运的是,我与测试数据的工作,这样很容易就够了。

其他提示

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

啊,这是不好的毫米文档记录。你需要做的:

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

希望有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top