Header
2018-02-13
2020-05-26

【初心者・独学者向け】Ruby on Railsでサブカテゴリーを設定する

123131

ArticleとCategoryの2つのmodelが設定しており Articleには記事を投稿し、紐づくCategoryを呼び出す設定があります。

今回SEO的に1記事1カテゴリーではなく複数のカテゴリーを設定する必要が出てきたので、簡易的にサブカテゴリーを設定する方法を解説します。

なお、通常は中間テーブルを作成して対応するので、 あくまで簡易的な設定方法となります。

詳細は Ruby on Railsで中間テーブルを作成し、多対多を実現する をご覧ください

前提:ArticleとCategoryのリレーションは1対多となります。

Articleのカラム

title
category_id
content
category_id
sub_category_id_1
sub_category_id_2

categoryカラム

id
name

Ruby on Rails のモデル間でリレーションの設定を行う

article_model 

class Article < ActiveRecord::Base
  belongs_to :category, inverse_of: :articles
  belongs_to :sub_category1, class_name: 'Category', :foreign_key => 'sub_category_id_1'
  belongs_to :sub_category2, class_name: 'Category', :foreign_key => 'sub_category_id_2'
end
category_model 

class Category < ActiveRecord::Base

  has_many :articles,             inverse_of: :category
end

Ruby on Rails のviewでサブカテゴリ-を表示する

モデルでリレーションを組んだら、あとは下記のように article.sub_category1.nameなどで呼べば表示されます

index.html.slim

    .articleMain-Block-tags
      .flex.align-center
        div
          = link_to  articles_in_category_path(article.category.slug) do
            .button
              = article.category.name
      - if article.sub_category1.present?
        div
          = link_to  articles_in_category_path(article.sub_category1.slug) do
            .button
              = article.sub_category1.name

      - if article.sub_category2.present?
        div
          = link_to articles_in_category_path(article.sub_category2.slug) do
            .button
              = article.sub_category2.name

記事によってサブカテゴリ-がnilになる場合は、viewで値があれば表示する設定にする必要があります。

1記事に対して複数のカテゴリーやタグを設定する場合は、 中間テーブルを利用してのやり方がおすすめなので Ruby on Railsで中間テーブルを作成し、多対多を実現する を御覧ください

その他関連記事

MySQLでテーブルをコピーする

【初心者・独学者向け】データベースとは何かを解説します

Ruby on Railsでデータベースカラムの追加と削除を行う

Carrierwave+S3で複数画像をアップロードする

あなたにお勧めの記事
前の記事
次の記事