1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Active Hash で作ったカテゴリーの中身を一覧表示する

Last updated at Posted at 2020-11-09

はじめに

やりたいこと

  • Active Hash で作ったカテゴリー毎に紐付くコンテンツを一覧表示する

手順

  • ルーティングを設定する
  • リンクを作る
  • コントローラーにアクションを記述する
  • 対応するビューを作る

前提としてActive Hashの導入とモデル/DBまわりの設定は完了しているものとします。

ルーティングを設定する

Itemモデルにcategory_idを持たせているので次のようにルーティングを設定

routes.rb
get '/items/category/:id', to: "items#category"

リンクを作る

リンクを作ります。

html.erb
link_to 'hoge', '/items/category/1'
link_to 'fuga', '/items/category/2'
link_to 'piyo', '/items/category/3'

ちなみにCategoryモデルはこんな感じの設定

models/category.rb
class Category < ActiveHash::Base
  self.data = [
    { id: 1, name: 'hoge' },
    { id: 2, name: 'fuga' },
    { id: 3, name: 'piyo' }
  ]
end

コントローラーにアクションを記述する

categoryアクションを定義します。

items_controller.rb
def category
  @item = Item.find_by(category_id: params[:id])
  @items = Item.where(category_id: params[:id]).order('created_at DESC')
end

カテゴリーの一覧ページでカテゴリー名を表示するために@itemを定義、eachで展開するために@itemsを定義しています。

対応するビューを作る

items配下にcategory.html.erbを作成します。

items/category.html.erb
#カテゴリー名の表示
  @item.category.name
#カテゴリーの中身を展開
  @items.each do |item|
    〜中略〜
  end

おわりに

link_toでそれぞれidを渡すことでだいぶ楽に書けたかなと思います。
もしもっと良い方法がありましたら教えてください!

✔︎

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?