[RUBY] [Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen

Ziel

ezgif.com-video-to-gif (1).gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke EinführungEinführung von Bootstrap 3Implementierung der Posting-FunktionImplementierung der Kategoriefunktion

Implementierung

1. Erstellen Sie eine Zwischentabelle

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. Spalte löschen

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. Bearbeiten Sie jedes Modell

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


#Nachtrag
belongs_to :book
belongs_to :category

4. Bearbeiten Sie den Controller

Machen Sie category_id mit dem starken Parameter books_controller.rb konfigurierbar.

books_controller.rb


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

5. Ansicht bearbeiten

** ① Formular bearbeiten **

slim:books/index.html.slim


/Vorher ändern
= f.label :category_id, 'Kategorie'
br
= f.collection_select :category_id, Category.all, :id, :name, { prompt: 'Bitte auswählen' }, class: 'form-control'
br

/Nach der veränderung
= label_tag 'Kategorie'
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| ➡︎ Die Namen aller Kategorien werden als Kontrollkästchen angezeigt und der Wert auf id gesetzt.

** ② Tabelle bearbeiten **

slim:books/index.html.slim


/Vorher ändern
td
  = category.name

/Nach der veränderung
td
  - book.categories.each do |category|
    = category.name
    | /

Recommended Posts

[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
[Rails] Implementierung der Kategoriefunktion
Implementierung der Ajax-Entfernung in Rails
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
[Rails] Implementierung des logischen Löschens durch den Benutzer
[Rails] Implementierung der CSV-Importfunktion
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Edit Form Edition"
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Schienen] Arten von Assoziationen (Eins-zu-Viele / Viele-zu-Viele)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer Validierung, die die Eindeutigkeit beibehält
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3
[Schienen] gem'payjp'implementierungsverfahren
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Einführung von PAY.JP
Implementierung von Rails Action Text
Implementierung der Suchfunktion
Implementierung der Pagenationsfunktion
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
[Rails] Implementierung der automatischen Adresseneingabe mit jpostal und jp_prefecture
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
[Rails] So zeigen Sie eine Liste der Beiträge nach Kategorie an
Implementierung der Fuzzy-Suchfunktion für Schienen
[Rails] Einführung in die Grundlagen der Entwicklung
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Ich habe versucht, ein Fenster mit Bootstrap 3 zu erstellen"
Implementierung der sequentiellen Suchfunktion