Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6237751
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 24, 20262026-05-24T11:05:18+00:00 2026-05-24T11:05:18+00:00

I have a Post model that belongs to a single category and author. Users

  • 0

I have a Post model that belongs to a single category and author. Users may create “favorites” for categories and authors. How can I most efficiently query a list of all posts, but with the visitor’s preferred categories and/or authors sorted to the top?

class Post < ActiveRecord::Base

  belongs_to :category
  belongs_to :author

end

class Favorite < ActiveRecord::Base

  belongs_to :user
  belongs_to :category # favorite category
  belongs_to :author # favorite author

end

class User < ActiveRecord::Base

  has_many :favorites

end
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-24T11:05:20+00:00Added an answer on May 24, 2026 at 11:05 am
    class User < ActiveRecord::Base
      has_many :favorites
    
      has_many :favorite_categories, :through => :favorites, :source => :category
      has_many :favorite_authors, :through => :favorites, :source => :author
    end
    
    class Favorite < ActiveRecord::Base
      belongs_to :user
      belongs_to :category # favorite category
      belongs_to :author # favorite author
    end
    
    class Post < ActiveRecord::Base
      belongs_to :category
      belongs_to :author
    
      named_scope :order_by_user, lambda {|user| where(
        :category_id => user.favorite_categories.map(&:id),
        :author_id   => user.favorite_authors.map(&:id)
      )}
    end
    
    user = User.first
    posts = Post.order_by_user(user)
    

    Alternate: less number of queries, but user model fetches data from Favorite

    class Favorite < ActiveRecord::Base
      belongs_to :user
      belongs_to :category # favorite category
      belongs_to :author # favorite author
    end
    
    class User < ActiveRecord::Base
      has_many :favorites
    
      def favorite_category_ids
        Favorite.where(:user_id => self.id).select(:category_id).map(&:category_id).compact
      end
    
      def favorite_author_ids
        Favorite.where(:user_id => self.id).select(:author_id).map(&:author_id).compact
      end
    end
    
    class Post < ActiveRecord::Base
      belongs_to :category
      belongs_to :author
    
      named_scope :order_by_user, lambda {|user| where(
        :category_id => user.favorite_category_ids,
        :author_id   => user.favorite_author_ids
      )}
    end
    
    user = User.first
    posts = Post.order_by_user(user)
    

    This code is not tested, but gives the idea.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Say you have a Post model that has a :title , :author , :content
I have two models, Article and Post that both inherit from a base model
I have a Category and a Post model, with each Post belonging to a
I have a Post model that has a polymorphic association with a Vote model:
I have a model that has counter_cache enabled for an association: class Post belongs_to
i have a model Post and a model User where a post belongs to
I have a nested model form that isn't functioning properly. The POST is to
Suppose I have an Comment model that belongs_to a Post model. I want to
I have a User model, a Post model, and an Interest model. User has_many
I have a typical, Post model: class Post< ActiveRecord::Base validates_presence_of :user_id #Line 1 validates_presence_of

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.