Я пытаюсь создать систему категорий для своего блога, но я столкнулся с этой ошибкой.Каждый blog_category
может иметь несколько sub_categories
, если parent_id
указывает на идентификатор основной категории.Некоторые sub_categories
и основные blog_categories
не имеют в них ничего.Как бы предотвратить попадание этого NoMethodError
?
BlogCategoriesController:
class BlogCategoriesController < ApplicationController
def index
@category = BlogCategory.find_by_id(params[:id])
@sub_category = @category.sub_categories.first
@posts = @subcategory.posts
end
private
def cat_params
params.require(:blog_category).permit(:name, :parent_id, :sub_category)
end
end
BlogCategory Модель:
class BlogCategory < ApplicationRecord
has_many :posts
# This is called a self referential relation. This is where records in a table may point to other records in the same table.
has_many :sub_categories, class_name: "BlogCategory", foreign_key: :parent_id
# This is a scope to load the top level categories and eager-load their posts, subcategories, and the subcategories' posts too.
scope :top_level, -> { where(parent_id: nil).includes :posts, sub_categories: :posts }
end
Сообщения указывают на категорию блога через t.integer "blog_category_id"
в таблице сообщений и имеет belongs_to :blog_category
в модели сообщений.