'How to access has_many through relationship possible in rails?

How can I access my related records?

class Post < ActiveRecord::Base
has_many :post_categories
has_many :categories, through: :post_categories

class Categories < ActiveRecord::Base
has_many :post_categories
has_many :post, through: :post_categories

class PostCategories < ActiveRecord::Base
belongs_to :post
belongs_to :category

PostCategories table has id, posts_id, and categories_id columns.

id | posts_id | categories_id
1. | 2       | 3
2. | 2       | 4

What I want is: to get posts related to a category. like: all Posts where in x category.



Solution 1:[1]

Not sure if this answers it but in ActiveRecord your Post will have direct access to your Category model and vice versa. So you could identify the category you want the posts from in a variable or an instance variable, and query @specific_category.posts. If you are doing this in your controller, you could even do it in before_action filter. If you are using it in serializers its not much different.

You could also create a scope in your Post model and use either active record or raw SQL to query specific parameters.

You also have an error in your Category model. Has many is always plural so it would be has_many :posts, through: :post_categories

Solution 2:[2]

Get the category object and you can directly fetch the related posts. Please see the following

category = Category.find(id)
posts = category.posts

Since you have already configured the has_many_through relation, rails will fetch post records related the category.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 V P
Solution 2 Karthik P R