【发布时间】:2012-03-19 07:23:50
【问题描述】:
我有以下型号:
class User
include Mongoid::Document
store_in :users
field :full_name, :type => String
end
class Message
include Mongoid::Document
embeds_one :sender, :class_name => "User"
field :text, :type => String
end
我想将User 和Message 存储在单独的独立集合中,以便可以直接查询它们,并且我想在每个消息条目中拥有sender 的用户副本。我的模型是否适合这种请求?
当我有一个用户user 的实例时,我如何查询sender = user 的消息?
我试过了:
Message.where(:sender => user)
Message.where('sender.id' => user.id)
两者都不起作用。
只有Message.where('sender.full_name' => user.full_name) 有效,但我不想在需要使用 id 字段时依赖文本字段。
最好的方法是什么?
我如何保存消息/用户:
user = User.new
user.full_name = 'larry'
user.save
m = Message.new(:text => 'a text message')
m.sender = user
m.save
它会生成数据库:
> db.users.find({ 'full_name' : 'larry'})
> db.messages.find({})[0]
{
"_id" : ObjectId("4f66e5c10364392f7ccd4d74"),
"text" : "a text message",
"sender" : {
"_id" : ObjectId("4f62e0af03642b3fb54f82b0"),
"full_name" : "larry"
}
}
【问题讨论】:
-
没错,穆。您可以将其转换为答案。但是我还是觉得有点迷茫。因为我一直觉得
Message.where(:sender => user)应该是这样做的方式。