Search code examples
ruby-on-railsruby-on-rails-3mongoid3

how to order through a mongoid association


I want to order through a collections with values from an association.

Example:

I got multible associations for a Post like:

  • Comments
  • Ratings
  • Attachements

How can i order the posts through this associations like:

  • order_by most_commented
  • order_by most_rated
  • order_by most_associations ....

Thank you.


Solution

  • Now i can answer this question ^^

    With Mongoid version 3.1 the active record feature "counter_cache" was aviable. For example i got a post with referenced comments:

    class Post
      include Mongoid::Document
      field :body, type: String
    
      has_many :comments                                                                                                                                                                             
    end
    
    
    
    class Comment
      include Mongoid::Document
      field :body, type: String
    
      belongs_to :post, counter_cache: true                                                                                                                                                                             
    end
    

    in this case every post instance got an comments_count field wich contains the number of comments are referenced in the post.

    Now you can order your posts with the comments_count field. Remember that this field is only available if at least one comment is present. Or set the comments_count field explicit with an default value in your model.