・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina
Ce qui suit a été mis en œuvre.
・ Présentation mince ・ Introduction de Bootstrap 3 ・ Mise en œuvre de la fonction de publication
** ① Créez une table de modèles de catégories **
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
** ② Ajouter une colonne à la table des livres **
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
** ③ Modifier chaque modèle **
book.rb
#Postscript
has_many :categories, dependent: :destroy
dependent: :destroy
➡︎ Lorsque la catégorie correspondante est supprimée, le livre lié est également supprimé.
category.rb
#Postscript
belongs_to :book
** ① Créez et modifiez categories_controller.rb
**
Créez un index et modifiez les vues à l'avance.
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
** ② Ajoutez category_id
au paramètre fort de books_controller.rb
**
books_controller.rb
def book_params
params.require(:book).permit(:title, :body, :category_id)
end
routes.rb
#Postscript
resources :categories, except: [:new, :show]
except: [:new, :show]
➡︎ Ajoutez des actions autres que nouvelles et montrez-les au routage.
slim:categories/index.html.slim
.row
.col-xs-3
= form_with model: @category, local: true do |f|
= f.label :name, 'Nom de catégorie'
br
= f.text_field :name, class:'form-control'
br
= f.submit 'ajouter à', class: 'btn btn-primary btn-block'
.col-xs-9
table.table
thead
tr
th
|Nom de catégorie
th
th
tbody
- @categories.each do |category|
tr
td
= category.name
td
= link_to 'Éditer', edit_category_path(category), class: 'btn-sm btn-primary'
td
= link_to 'Effacer', category_path(category), method: :delete, data: { confirm: '本当にEffacerしますか?' }, 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, 'Nom de catégorie'
br
= f.text_field :name, class:'form-control'
br
= f.submit 'sauvegarder', 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, 'Titre'
br
= f.text_field :title, class:'form-control'
br
= f.label :body, 'Texte'
br
= f.text_area :body, class:'form-control'
br
/Postscript
= f.label :category_id, 'Catégorie'
br
= f.collection_select :category_id, Category.all, :id, :name, { prompt: 'Veuillez sélectionner' }, class: 'form-control'
br
= f.submit 'Publier', class: 'btn btn-primary btn-block'
.col-xs-9
table.table
thead
tr
th
|Donateur
th
|Titre
th
|Texte
/Postscript
th
|Catégorie
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
/Postscript
td
= book.category.name
td
-if book.user == current_user
= link_to 'Effacer', book, method: :delete, data: { confirm: '本当にEffacerしてもよろしいですか?' }, class: 'btn-sm btn-danger'
= f.collection_select :category_id, Category.all, :id, :name
➡︎ Le nom
de toutes les catégories est affiché dans le menu déroulant et la valeur est définie sur ʻid`.
Recommended Posts