・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina
Folgendes wurde implementiert.
・ Schlanke Einführung ・ Einführung von Bootstrap 3 ・ Implementierung der Posting-Funktion
** ① Erstellen Sie eine Kategoriemodelltabelle **
Terminal
$ rails g model Category name:string
Terminal
$ rails db:migrate
schema.rb
create_table "categories", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
** ② Fügen Sie der Büchertabelle eine Spalte hinzu **
Terminal
$ rails g migration AddCategoryIdToBooks category_id:integer
Terminal
$ rails db:migrate
schema.rb
create_table "books", force: :cascade do |t|
t.integer "user_id"
t.string "title"
t.text "body"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "category_id"
end
** ③ Jedes Modell bearbeiten **
book.rb
#Nachtrag
has_many :categories, dependent: :destroy
dependent: :destroy
➡︎ Wenn die entsprechende Kategorie gelöscht wird, wird auch das verknüpfte Buch gelöscht.
category.rb
#Nachtrag
belongs_to :book
** ① Erstelle und bearbeite category_controller.rb
**
Erstellen Sie einen Index und bearbeiten Sie die Ansichten im Voraus.
Terminal
$ rails g controller categories index edit
categories_controller.rb
class CategoriesController < ApplicationController
before_action :set_category, only: [:edit, :update, :destroy]
def index
@category = Category.new
@categories = Category.all
end
def create
@category = Category.new(category_params)
if @category.save
redirect_to categories_path
else
@categories = Category.all
render 'index'
end
end
def edit
end
def update
if @category.update(category_params)
redirect_to categories_path
else
render 'edit'
end
end
def destroy
@category.destroy
redirect_to categories_path
end
private
def set_category
@category = Category.find(params[:id])
end
def category_params
params.require(:category).permit(:name)
end
end
** ② Füge category_id
zum starken Parameter von books_controller.rb
hinzu **
books_controller.rb
def book_params
params.require(:book).permit(:title, :body, :category_id)
end
routes.rb
#Nachtrag
resources :categories, except: [:new, :show]
except: [:new, :show]
➡︎ Fügen Sie andere als neue Aktionen hinzu und zeigen Sie sie dem Routing an.
slim:categories/index.html.slim
.row
.col-xs-3
= form_with model: @category, local: true do |f|
= f.label :name, 'Kategoriename'
br
= f.text_field :name, class:'form-control'
br
= f.submit 'hinzufügen', class: 'btn btn-primary btn-block'
.col-xs-9
table.table
thead
tr
th
|Kategoriename
th
th
tbody
- @categories.each do |category|
tr
td
= category.name
td
= link_to 'Bearbeiten', edit_category_path(category), class: 'btn-sm btn-primary'
td
= link_to 'Löschen', category_path(category), method: :delete, data: { confirm: '本当にLöschenしますか?' }, class: 'btn-sm btn-danger'
slim:categories/edit.html.slim
.row
.col-xs-3
.col-xs-6
= form_with model: @category, local: true do |f|
= f.label :name, 'Kategoriename'
br
= f.text_field :name, class:'form-control'
br
= f.submit 'sparen', class: 'btn btn-primary btn-block'
.col-xs-3
slim:books/index.html.slim
.row
.col-xs-3
= form_with model: @book, local: true do |f|
= f.label :title, 'Titel'
br
= f.text_field :title, class:'form-control'
br
= f.label :body, 'Text'
br
= f.text_area :body, class:'form-control'
br
/Nachtrag
= f.label :category_id, 'Kategorie'
br
= f.collection_select :category_id, Category.all, :id, :name, { prompt: 'Bitte auswählen' }, class: 'form-control'
br
= f.submit 'Post', class: 'btn btn-primary btn-block'
.col-xs-9
table.table
thead
tr
th
|Mitwirkender
th
|Titel
th
|Text
/Nachtrag
th
|Kategorie
th
tbody
- @books.each do |book|
tr
td
= link_to book.user do
= book.user.name
td
= link_to book.title, book_path(book)
td
= book.body
/Nachtrag
td
= book.category.name
td
-if book.user == current_user
= link_to 'Löschen', book, method: :delete, data: { confirm: '本当にLöschenしてもよろしいですか?' }, class: 'btn-sm btn-danger'
= f.collection_select :category_id, Category.all, :id, :name
➡︎ Der Name
aller Kategorien wird im Pulldown-Menü angezeigt und der Wert auf id
gesetzt.
Recommended Posts