ジャンル機能について
今回はジャンル機能について記述していきたいと思います。
前提として今回は顧客と管理者側に分けており、管理者側の方にジャンル作成していきます。
※adminは管理者の事です。
ジャンルのモデル作成
$ rails g model Genre
のコマンドを打ち込み作成します。
その後にマイグレーションファイルを開きカラムを追加。
db/migrate/_create_genres.rb
class CreateGenres < ActiveRecord::Migration[6.1]
def change
create_table :genres do |t|
t.string :name
t.timestamps
end
end
end
t.string :nameを追加してあげましょう。
nameは今回ジャンルに追加する名前の事です。
$ rails db:migrate
忘れずにrails db:migrateをしたら下準備は完了です。
Viewページに記述
今回はindex.html.erbとedit.html.erbの2つを使用します。
app/views/admin/genres/index.html
<h3>ジャンル一覧・追加</h3>
<%=form_with model: @genre,url: admin_genres_path, method: :post do |f| %>
<td><%= f.label :"ジャンル名", class: "mr-3" %></td>
<td><%= f.text_field :name, class: "mr-5" %></td>
<td><%= f.submit'新規登録',class: "btn btn-primary" %></td>
<% end %>
<th>ジャンル</th>
<% @genres.each do |genre| %>
<td><%= genre.name %></td>
<td><%= link_to "編集する", edit_admin_genre_path(genre.id), class: "btn-success" %></td>
<%end%>
app/views/admin/genres/edit.html
<h3>ジャンル編集</h3>
<%= form_with model: @genre, url: admin_genre_path,method: :patch do |f| %>
<td><%= f.label :"ジャンル名", class: "mr-3" %></td>
<td><%= f.text_field :name, class: "mr-5" %></td>
<td><%= f.submit "変更を保存", class: "btn btn-primary" %></td>
<% end %>
indexとeditにそれぞれform_withなどを用いながら作成していきます。
レイアウトはこの状態では綺麗ではないのでそれぞれの好みに合わせて見た目などは作成してください。
コントローラーに記述
app/controllers/admin/genres_controller.rb
class Admin::GenresController < ApplicationController
def index
@genre = Genre.new
@genres = Genre.all
end
def create
@genre = Genre.new(genre_params)
@genre.save
redirect_to admin_genres_path
end
def edit
@genre = Genre.find(params[:id])
end
def update
@genre=Genre.find(params[:id])
@genre.update(genre_params)
redirect_to admin_genres_path
end
private
def genre_params
params.require(:genre).permit(:name)
end
end
これらをそれぞれコントローラーに記述し定義してあげレイアウトを整えるとシンプルではありますが上の写真のようにジャンルの一覧と追加を行う事ができます。
こちらの使い方の前提として管理者側でジャンルを追加し、顧客側で追加したジャンルを反映させ使用するものとなりますので使い方を間違えないようにお願いいたします。