неопределенный метод `sub_categories 'для nil: NilClass - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь создать систему категорий для своего блога, но я столкнулся с этой ошибкой.Каждый 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 в модели сообщений.

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете добавить подтверждение

def index
  @category = BlogCategory.find_by_id(params[:id])
  unless @category.nil?
      @sub_category = @category.sub_categories.first
      @posts = @subcategory.posts
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...