【Rails】투고 카테고리 기능(메모)
목표
환경
전제
구현
category 모델링
터미널$ rails g model Category name:string
마이그레이션 파일 생성.
class CreateCategories < ActiveRecord::Migration[6.1]
def change
create_table :categories do |t|
t.string :name
t.timestamps
end
end
end
$ rails db:migrate
post 테이블에 카테고리 열 추가
터미널$ rails g migration AddCategoryIdToPosts category_id: integer
마이그레이션 파일 생성.
class AddCategoryIdToPosts < ActiveRecord::Migration[6.1]
def change
add_column :posts, :category_id, :integer
end
end
터미널$ rails db:migrate
모델 연관(연결)
post
에는 여러 범주가 있으므로 has_many :categories
app/models/post.rbclass Post < ApplicationRecord
has_many :categories
카테고리가 하나의 게시물에 속하기 때문에 belongs_to :post
app/models/category.rbclass Category < ApplicationRecord
belongs_to :post
라우팅 설명
config.routes.rbRails.application.routes.draw do
resources :categories
end
category 컨트롤러 작성
터미널$ rails g controller categories
생성된 컨트롤러에 설명.
app/controllers/categories_controller.rbclass CategoriesController < ApplicationController
def index
@categories = Category.all
end
def create
@category = Category.new(category_params)
@category.save
end
end
private
def category_params
params.require(:category).permit(:name)
end
app/controllers/posts_controller.rbprivate
def post_params
params.require(:post).permit(:content, :title, :category_id)
end
뷰 설명
카테고리를 추가할 수 있는 양식입니다.
app/views/categories/new.html.erb<h2>カテゴリの追加 </h2>
<%= form_with model: @category, local: true do |f| %>
<div class='from_input'>
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="form_action">
<%= f.submit "登録する", class: "btn btn-primary" %>
</div>
<% end %>
추가한 카테고리를 확인할 수 있습니다.
app/views/categories/index.html.erb<h1>カテゴリ一覧</h1>
<table class="table table-hover">
<tbody>
<% @categories.each do |cate| %>
<tr>
<td><%= link_to cate.name, posts_path(category_id: cate.id) %></td>
<td><%= cate.created_at.to_s(:datetime_jp) %>作成</td>
</tr>
<% end %>
</tbody>
</table>
새로운 게시물을 만들 때 카테고리를 선택할 수 있도록 양식에 추가.
app/views/posts/new.html.erb
<h2>投稿ページ</h2>
<%= form_with model: @post do |f| %>
<div class="form-input">
<%= f.label :title, 'タイトル' %>
<%= f.text_field :title, class: "form-control" %>
</div>
<div class="form_input">
<%= f.label :content, '本文' %>
<%= f.text_field :content, class: "form-control" %>
</div>
<div class="form_input">
<%= f.label :category_id %>
<%= f.collection_select :category_id, Category.all, :id, :name, { prompt: '選択してください' }, class: 'form-control' %>
</div>
<div class="form_action row">
<%= f.submit "投稿する", class: "btn btn-primary"%>
</div>
<% end %>
이제 카테고리를 선택할 수 있습니다.
요약
앞으로도 사용할 가능성이 있는 기능이라고 생각하므로 비망록으로 남겨 둡니다.
Reference
이 문제에 관하여(【Rails】투고 카테고리 기능(메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moru0606/items/22f3ce0c54537ce5f5d1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ rails g model Category name:string
class CreateCategories < ActiveRecord::Migration[6.1]
def change
create_table :categories do |t|
t.string :name
t.timestamps
end
end
end
$ rails db:migrate
$ rails g migration AddCategoryIdToPosts category_id: integer
class AddCategoryIdToPosts < ActiveRecord::Migration[6.1]
def change
add_column :posts, :category_id, :integer
end
end
$ rails db:migrate
class Post < ApplicationRecord
has_many :categories
class Category < ApplicationRecord
belongs_to :post
Rails.application.routes.draw do
resources :categories
end
$ rails g controller categories
class CategoriesController < ApplicationController
def index
@categories = Category.all
end
def create
@category = Category.new(category_params)
@category.save
end
end
private
def category_params
params.require(:category).permit(:name)
end
private
def post_params
params.require(:post).permit(:content, :title, :category_id)
end
<h2>カテゴリの追加 </h2>
<%= form_with model: @category, local: true do |f| %>
<div class='from_input'>
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="form_action">
<%= f.submit "登録する", class: "btn btn-primary" %>
</div>
<% end %>
<h1>カテゴリ一覧</h1>
<table class="table table-hover">
<tbody>
<% @categories.each do |cate| %>
<tr>
<td><%= link_to cate.name, posts_path(category_id: cate.id) %></td>
<td><%= cate.created_at.to_s(:datetime_jp) %>作成</td>
</tr>
<% end %>
</tbody>
</table>
<h2>投稿ページ</h2>
<%= form_with model: @post do |f| %>
<div class="form-input">
<%= f.label :title, 'タイトル' %>
<%= f.text_field :title, class: "form-control" %>
</div>
<div class="form_input">
<%= f.label :content, '本文' %>
<%= f.text_field :content, class: "form-control" %>
</div>
<div class="form_input">
<%= f.label :category_id %>
<%= f.collection_select :category_id, Category.all, :id, :name, { prompt: '選択してください' }, class: 'form-control' %>
</div>
<div class="form_action row">
<%= f.submit "投稿する", class: "btn btn-primary"%>
</div>
<% end %>
앞으로도 사용할 가능성이 있는 기능이라고 생각하므로 비망록으로 남겨 둡니다.
Reference
이 문제에 관하여(【Rails】투고 카테고리 기능(메모)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moru0606/items/22f3ce0c54537ce5f5d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)