[RUBY] [Rails] Implémentation de la fonction de catégorie

Cible

ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation minceIntroduction de Bootstrap 3Mise en œuvre de la fonction de publication

la mise en oeuvre

1. Modèle

** ① 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

2. Contrôleur

** ① 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

3. Routage

routes.rb


#Postscript
resources :categories, except: [:new, :show]

except: [:new, :show] ➡︎ Ajoutez des actions autres que nouvelles et montrez-les au routage.

4. Afficher

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

[Rails] Implémentation de la fonction de catégorie
Mise en œuvre de la fonction déroulante de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Fonction de catégorie
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Mise en œuvre de la fonction de pagénation
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Implémentation de la suppression d'ajax dans Rails
Implémentation de la fonction de recherche floue Rails
Implémentation de la fonction de recherche séquentielle
Implémentation d'une fonction similaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Rails] Implémentation de la suppression logique utilisateur
[Ruby on Rails] Implémentation de la fonction de commentaire
[Rails] Commentaire mémo de procédure d'implémentation
Implémentation d'une fonction similaire en Java
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Implémentation de la fonction DM
Rails Ajout d'une fonction de connexion facile et facile
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
Les rails suivent la fonction
Échafaudage de procédure d'implémentation de fonction CRUD de base
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Rails] Implémentation de la fonction de balise à l'aide de la fonction agit-as-taggable-on et de la fonction de complétion d'entrée de balise à l'aide de tag-it