Ruby on Railsでカテゴリーを関連付ける方法

RubyonRailsでカテゴリーを関連付ける方法

Railsやってて、カテゴリーってどうやって関連付けるんだろう?そう思ったことはないだろうか?

今この記事を見ているのなら、カテゴリーとPostとかShopとかVideoとの関連付けに困っているはず。

なので、Railsでカテゴリーを関連付けする方法を解説します。

どうも!15年ほど現役ITエンジニアをしているよこやま良平です。
その観点からわかりやすく解説します。

使い方から収益化までプロが教える
WordPressの教科書

「もう限界かもしれない…」
そんな思いで立ち止まっていませんか?

「収益が一向に増えず、事業を続ける意味に迷い始めている」
「クラウドソーシングや営業して稼げるか不安だ」
「収益化したいけれど、YouTubeや書籍では解決できなかった」
「WordPressでLP制作を頼まれるが、具体的な方法がわからない」
「広告を出稿したが、まったく成果が出なくて悩んでいる」
「仕事でグラフや資料制作を思うように作れない」
「独学の限界を感じ、でも何から学ぶべきかわからない」

これらの悩みを抱えているのは、
あなただけではありません。

多くのフリーランスや経営者が、
同じ壁にぶつかっています。

その壁を越えるための「本物の解決策」が、ここにあります。

私たちはこれまで、
数多くのフリーランスや経営者が収益化に成功するための
お手伝いをしてきました。

WordPressでホームページやブログを作るスキルだけでなく、
広告を最大限活用して集客し、
売上を上げるノウハウを惜しみなくお伝えします。

「成果が出る広告の作り方」
「売れるホームページを構築する秘訣」
「初心者でも成果を上げるための実践的なステップ」

これらを余すことなく提供するWordPressの教科書を、
今なら無料で受け取れます!

\先着300名限定!特典付きで無料配布中/

今すぐ無料ダウンロードする

いまなら、先着300部限定で無料プレゼント付です。

今すぐ無料ダウンロードする

1 RailsでScaffoldでベースを作成

まずは元になる、ShopとかPostとかをScaffoldします。

$ rails g scaffold post title:string content:text category_id:integer
$ rails db:migrate

これでベースとなる入力フォームができます。

2 RailsでCategoryを作成する

次はRailsのコマンドで同じくカテゴリーのベースをScaffoldで作成します。

$ rails g scaffold category name:string
$ rails db:migrate

これでカテゴリー入力フィールドが出来ました。

3 PostとCategoryをModelsで関連付ける

こっから困っている部分になってますね?

関連付ける場所は2かしょです。

class Category < ApplicationRecord
  has_many :posts
end
class Post< ApplicationRecord
  belongs_to :category
end
has_many :posts
belongs_to :category

この2つを使って関連付けを行います。重要な部分です。

4 Railsで関連付けしたカテゴリーを投稿時に選択できるようにする

<div class="field">
  <%= form.select :category_id, Category.all.map{|o| [o.name, o.id]} %>
</div>

こう書くことで、Categoryの元々ある番号とPostsで作ったCategory_idを関連付けできます。

関連づけると、数字での選択ではなくCategoryで作成した名前で選択できるようになります。

  • メンズ
  • インナー
  • ジャケット
  • パンツ

などの名前で選択できるようになります。

5 Viewsへも追加してRailsで関連付けたカテゴリーを表示できるようにする

<%= post.category.name %>

これをindex.html.erb ファイルに追加する。
こちらは

<% @posts.each do |post| %>
~中略~
この間に入れる
~中略~
<% end %>

続いて

<%= @post.category.name %>

show.html.erb内ならどこに置いても動く。

Railsのカテゴリー関連付け成功例
Railsのカテゴリー関連付け成功例

応用編 制作途中でカテゴリーを追加したくなったら

$ rails g migration AddCategory_idToPosts category_id:integer
$ rails db:migrate

これで追加できるので、次の記述も忘れずに

 def post_params
    params.require(:post).permit(:title, :content, :category_id )
 end
:category_id

この追加した部分を忘れないように追記すること。

これを忘れると、投稿時や編集時にカテゴリーを保存出来なくなる

番外編 エラー:Category translation missing: ja.activerecord.errors.models.post.attributes.category.required が出たら

Category translation missing: ja.activerecord.errors.models.video.attributes.category.required

こんなエラーが出たら、これはエラー文章がうまく日本語化できてない証拠。

ja:
  activerecord:
    errors:
      models:
        video:
          attributes:
            category:
              required: カテゴリー選択必須

このように追加してやると解決する。

人によって

  • ja.yml

これが devise.views.ja.yml になっている場合もある

この devise はログイン制御する実装を行うと一番始めに使うGemなので使っていたらわかる。

この記事を書いた人

よこやま良平

こんにちは!18年以上ITエンジニアとして活動してきた
よこやま良平です。

4歳~85歳まで、年間1,792人名以上の方に
パソコンやプログラミング講座を行ってきました。

また18冊以上の書籍を出版しており、連続で1位を獲得しました。
オンライン講座では200件以上のレビューを頂いており
評価は4.9/5.0と高評価を得ています。

その他これまでに3000以上のサービス・システム・サイトを作成。