2016-07-14 9 views
0

Postactivity私はポストモデル(has_one関係)の外部キーとしてpost_idを持ち、このPostactivityモデルは類似配列を持っています。モンゴイードソート他のモデル(has_one)の関係にある配列のサイズに基づくモデル

私はどのように並べ替えることができますPostモデルによってlikesですか?

class Post 
    has_one :postactivity, foreign_key: :post_activity_id, class_name:"PostActivity" 
end 

class PostActivity 
    field :likes, type: Array 
    belongs_to :post, foreign_key: :post_id, class_name: "Post" 
end 
+0

は、あなたがこのモデルを提供することができます私のために働きましたか? –

+0

モデルを追加しました –

+0

MongoDBにはJOINはありませんので、一度に1つのコレクションでしか作業できません。 Rubyで手動でJOINを実行するか、または非正規化する(つまり、データをコピーして、配列が変化すると同期させる)。 MongoDBは、データモデルを考慮に入れていません。あらゆるものがどこかで複数のコピーで終わります。 –

答えて

1
class PostActivity 
    field :likes, type: Array 
    field :likes_count, type: Integer, default: 0 
    belongs_to :post, foreign_key: :post_id, class_name: "Post" 

    before_save do 
    self.likes_count = lies.size 
    end 
end 

今、あなたはlikes_countフィールドでPostActivityモデルを並べ替えることができます。

PostActivity.order_by(:likes_count => :desc) 

PostActivityインスタンスをソートしました。あなたがポストを必要とする場合は、呼び出しによってそれらを得ることができます。

PostActivity.order_by(:likes_count => :desc).first.post 
+0

それは私にちょうど最初の投稿を与える。私はすべてのポストをインスタンス変数にソートしたいと考えています –

+0

私は答えを投稿しました。他にも効率的な方法があります。助けてくれてありがとう –

1

posts =Array.new
PostActivity.order_by(:likes_count => :desc).each do |pa|
posts << pa.post
end
が、これは

関連する問題