[RUBY] [Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs

Cible

ezgif.com-video-to-gif (1).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 publicationImplémentation de la fonction de catégorie

la mise en oeuvre

1. Créez une table intermédiaire

Terminal


$ rails g model BookCategory book_id:integer category_id:integer

Terminal


$ rails db:migrate

schema.rb


create_table "book_categories", force: :cascade do |t|
  t.integer "book_id"
  t.integer "category_id"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

2. Supprimer la colonne

Terminal


$ rails g migration RemoveCategoryIdFromBooks category_id:integer

~_remove_category_id_from_books


class RemoveCategoryIdFromBooks < ActiveRecord::Migration[5.2]
  def change
    remove_column :books, :category_id, :integer
  end
end

Terminal


$ rails db:migrate

3. Modifiez chaque modèle

book.rb


has_many :book_categories
has_many :categories, through: :book_categories

category.rb


has_many :book_categories
has_many :books, through: :book_categories

book_category.rb


#Postscript
belongs_to :book
belongs_to :category

4. Modifiez le contrôleur

Rendez category_id configurable avec le paramètre fort de books_controller.rb.

books_controller.rb


def book_params
  params.require(:book).permit(:title, :body, { category_ids: [] })
end

5. Modifier la vue

** ① Modifier le formulaire **

slim:books/index.html.slim


/Changer avant
= f.label :category_id, 'Catégorie'
br
= f.collection_select :category_id, Category.all, :id, :name, { prompt: 'Veuillez sélectionner' }, class: 'form-control'
br

/Après le changement
= label_tag 'Catégorie'
br
= collection_check_boxes(:book, :category_ids, Category.all, :id, :name) do |cb|
  = cb.label { cb.check_box + ' ' + cb.text }
br

= collection_check_boxes(:book, :category_ids, Category.all, :id, :name) do |cb| ➡︎ Les noms de toutes les catégories sont affichés sous forme de cases à cocher et la valeur est définie sur id.

** ② Modifier le tableau **

slim:books/index.html.slim


/Changer avant
td
  = category.name

/Après le changement
td
  - book.categories.each do |category|
    = category.name
    | /

Recommended Posts

[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation de la fonction de catégorie
Implémentation de la suppression d'ajax dans Rails
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] 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 suppression logique utilisateur
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[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 catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Rails] Types d'associations (un-à-plusieurs / plusieurs-à-plusieurs)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Mise en œuvre de la validation qui maintient l'unicité
[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
[Rails] Mise en œuvre de "notifier la notification d'une manière ou d'une autre"
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3
[rails] gem'payjp'implementation procedure
[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] Présentation de PAY.JP
Implémentation de Rails Action Text
Implémentation de la fonction de recherche
Mise en œuvre de la fonction de pagénation
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
[Rails] Implémentation de la saisie d'adresse automatique avec jpostal et jp_prefecture
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
[Rails] Comment afficher une liste de messages par catégorie
Implémentation de la fonction de recherche floue Rails
[Rails] Introduction aux principes de base du dispositif
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "J'ai essayé de créer une fenêtre avec Bootstrap 3"
Implémentation de la fonction de recherche séquentielle