2

モンゴイドのImnewbeeと私は2つの基本的な(私が思う)質問があります。参照の配列をMongoidに格納するための最良の方法は何ですか。これが私が必要とするものの短い例です(単純な投票):

{
  "_id" : ObjectId("postid"),
  "title": "Dummy title",
  "text": "Dummy text",
  "positive_voters": [{"_id": ObjectId("user1id")}, "_id": ObjectId("user2id")],
  "negative_voters": [{"_id": ObjectId("user3id")}]
}

そして、それは正しい方法ですか?

class Person
  include Mongoid::Document
  field :title, type: String
  field :text, type: String

  embeds_many :users, as: :positive_voters
  embeds_many :users, as: :negative_voters
end

またはそれは間違っていますか?

また、よくわかりませんが、この状況ではドキュメントの構造が悪いのではないでしょうか。ユーザーがすでに投票していて、ユーザーに2回の投票を許可しない場合、どうすれば優雅に取得できますか?たぶん私はドキュメントの別の構造を使用する必要がありますか?

4

1 に答える 1

5

ユーザードキュメント全体を直接保存するのではなく、投票者の参照をドキュメントに保存したいだけなので、embeds_manyではなくhas_manyを選択できます。

class Person
    include Mongoid::Document
    field :title, type: String
    field :text, type: String

    has_many :users, as: :positive_voters
    has_many :users, as: :negative_voters

    validate :unique_user

    def unique_user
       return self.positive_voter_ids.include?(new_user.id) || self.negative_voter_ids.include?(new_user.id)         
    end

end
于 2012-06-03T03:04:21.327 に答える