作業中のサイトのデータベースをレイアウトする方法を見つけようとしています。ここに私のモデルがあります:
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
find
EmbeddedDocument を使用すると問題が発生しますが、 およびその他の便利なメソッドが失われ、両方のモデルに埋め込むことはできません。そのため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 を使用してこれをコーディングする最も可能性の高い方法について誰か教えてもらえますか?
前もって感謝します!