我试图弄清楚如何为我正在处理的网站布局我的数据库。这是我的模型:
class User
include MongoMapper::Document
// keys here
many :items
many :likes
end
class Item
include MongoMapper::Document
key :name, String, :required => true
many :likes
end
class Like
include MongoMapper::EmbeddedDocument
key :user_id, String, :required => true
end
我相信Like
应该嵌入某个地方,但我很难选择一个,因为我想摆脱它的功能。
user = User.first
user.likes // should print out all the Items he liked
item = Item.first
item.likes // so I can count how many people like that item
尽管使用 EmbeddedDocument 时会出现问题,但您会丢失find
, 和其他有用的方法,并且不能将其嵌入到两个模型中。所以只有在 中Item
,我需要运行它(但不能):
item = Item.first
item.likes.find_by_user_id(User.first._id)
find_by_user_id
将抛出未定义的方法。因此,如果我要将它嵌入到我的User
中,我仍然无法做到这一点。
likes = Like.all // will throw undefined `all`
所以我得出结论可能会这样做:
class Like
include MongoMapper::Document
key :user_id, String, :required => true
key :item_id, String, :required => true
belongs_to :user
belongs_to :item
end
但这似乎我仍在尝试以旧的 MySQL 方式做事。谁能给我一个关于最有可能用 MongoMapper 进行编码的方法的观点?
提前致谢!