2016-07-14 66 views
0

我有Postactivity模型,其中post_id作爲Post Model的外鍵(has_one關係),並且此Postactivity模型具有likes數組。Mongoid排序基於其他Model(has_one)關係的數組大小的模型

我該如何排序Post model by 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,因此您一次只能使用一個集合。要麼在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
這個工作對我來說

相關問題