[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 mince ・ Introduction de Bootstrap 3 ・ Mise en œuvre de la fonction de publication ・ Implé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