0

私は3つの書類を持っています

class User
    include Mongoid::Document
    has_many :votos
    ...
    ...
end

class Picture
    include Mongoid::Document
    has_many :votos
    belongs_to :user
    ...
    ...
end

class Voto
    include Mongoid::Document
    belongs_to :picture
    belongs_to :user
    field :value => :type => Integer
    ...
    ...
end

Voto ドキュメントでは、フィールド値は 1 から 5 までの数値です

だから私はすべての写真の中で最も投票された写真を表示する必要があります...

どうすればこれを達成できますか???

ありがとう

4

1 に答える 1

0

クエリを実行することもできますが、非常に時間がかかり、パフォーマンスが低下します。もう1つの解決策はtotal_votos、モデルPictureにフィールドを作成し、投票がPictureに与えられるたびにフィールド値をtotal_votesに追加することです

class Picture
   include Mongoid::Document
   has_many :votos
   belongs_to :user
   field :total_votes,:type => Integer
   ...
   ...
end

class Voto
    include Mongoid::Document
    belongs_to :picture
    belongs_to :user
    field :value => :type => Integer
    after_create do
       picture = self.picture
       picture.total_votes += self.value
       picture.save
    end
    ...
    ...
end

クエリを実行するだけで最大値を見つけることができます

Picture.where(:max_votes => Picture.all.max(:total_votes))
于 2012-09-28T11:37:32.083 に答える