はじめに
やりたいこと
- 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を渡すことでだいぶ楽に書けたかなと思います。
もしもっと良い方法がありましたら教えてください!
✔︎