У меня есть следующая модель:
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 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"
}
}