Alle Inhalte der Listenseite löschen [Ruby on Rails]

Löschen Sie alle ausgewählten Inhalte von der Inhaltslistenseite

Aktivieren Sie für jeden Beitrag ein Kontrollkästchen (Ansicht)

Aktivieren Sie für jeden Inhaltsbeitrag ein Kontrollkästchen Da Ajax nicht verwendet wird, deaktivieren Sie die XML-Kommunikation mit der Option form_with.

ruby:index.html.erb


<%= form_with model: @contents, url: contents_path, method: :delete, local: true do |f| %>
#local:Deaktivieren Sie die XML-Kommunikation mit true
    <% @contents.each do |content| %>
        <% @count += 1%>
        <td>
            <%= f.check_box :content_ids, {type: 'checkbox', class: 'checkbox-select', id: "checkbox#{@count}", multiple: true}, content.id %>
             <%= f.label :'', for: "checkbox#{@count}",class: 'select-label' %>
        </td>   
   <% end %>
<% end %>

Dadurch wird für jeden Beitrag ein Kontrollkästchen hinzugefügt

Ich habe versucht, nur die notwendigen Optionen von form_with entsprechend dem Zweck dieser Zeit zusammenzufassen

python


 <%= f.check_box :content_ids, {type: 'checkbox' multiple: true}, content.id %>

Add multiple: true, damit mehrere Werte in einem Array an den Controller gesendet werden können.

Ein Hash mit dem Namen content wird an die Steuerung gesendet. Schlüssel ist content_ids, Wert ist ein Array. Und es gibt content.id im Array

Aus der Ansicht gesendeter Wert


"content"=>{"content_ids"=>["1", "2"]}}

Es ist kompliziert (lacht)

Implementieren Sie Werterfassungs- und Löschfunktionen auf dem Controller (Controller).

Rufen Sie zunächst den von View gesendeten Wert mit dem Parameter strong ab

contents_controller.rb


def select_content_params
    ids = params.require(:content).permit(content_ids: [])
    ids.values[0]
end
  1. Zeile: Es können nur content_ids im gesendeten Inhalt verwendet werden. Wenn unerwartete Daten gesendet werden, werden diese ignoriert.
  2. Zeile: Extrahieren Sie nur das Array mit der Methode values für IDs. Da der Wert zu diesem Zeitpunkt [["1", "2"]] ist, geben Sie [0] an und extrahieren Sie nur ["1", "2"].

Schreiben Sie danach den Prozess mit dem formatierten Wert

contents_controller.rb


def select_destroy
  if select_content_params.uniq.count == 1
    redirect_to contents_url, notice: "Bitte wählen Sie den zu löschenden Eintrag aus"
  else
    select = []
    select_content_params.map{|n|
      select << n
      select.delete("0")
    }
      select.each{|id|
        content = Content.find(id)
        content.destroy
      }
    redirect_to contents_url, notice: "Ich habe das Lesezeichen gelöscht"
  end
end

Genau genommen werden Werte, die nicht im Kontrollkästchen aktiviert sind, als 0 gesendet. Daher wird die uniq-Methode verwendet, um Doppelarbeit zu vermeiden, und die count-Methode wird verwendet, um die Anzahl der Werte im Array und in der Verzweigung zu zählen, wenn. Nicht markiert → Nur 0 == 1 Aktiviert → 0 und ID vorhanden> 1

Wenn es nicht aktiviert ist, ist es möglicherweise einfacher, Null zurückzugeben, aber bitte tun Sie, was Sie möchten.

Unhöfliche Einstellungen

routes.rb


delete "contents" => "contents#select_destroy", as: 'select_destroy'

Abgeschlossen mit!

Danke für Ihre Kooperation. Wenn Sie Fragen haben, wäre ich Ihnen dankbar, wenn Sie nach einem Professor fragen könnten!

Recommended Posts

Alle Inhalte der Listenseite löschen [Ruby on Rails]
[Ruby on Rails] Bis zur Einführung von RSpec
Bestimmen Sie die aktuelle Seite mit Ruby on Rails
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
[Java] Löschen Sie die Elemente von List
[Ruby on Rails] Zeigt den Seitentitel schnell im Browser an
Ein Hinweis zum Seed-Feature von Ruby on Rails
[Ruby on Rails] Erstellung der Bestätigungsseite
[Ruby] Zeigt den Inhalt von Variablen an
[Ruby on Rails] Ändere das Speicherziel von Gem Refile * Hinweis
Erklärung von Ruby on Rails für Anfänger ⑤ ~ Datenbank bearbeiten und löschen ~
[Ruby on Rails] Einführung der Anfangsdaten
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
[Ruby] Schneiden Sie den Inhalt von Twitter-Anzeigen ab
Befehl zum Erstellen / Löschen des Ruby on Rails-Controllers
[Ruby on Rails] Japanische Fehlernotation
Erklärung von Ruby auf Schienen für Anfänger ①
[Ruby on Rails] Implementierung einer ähnlichen Funktion
So lösen Sie die lokale Umgebungskonstruktion von Ruby on Rails (MAC)!
Ruby on Rails Wenn Sie die Ursache für das Zurücksetzen beim Speichern nicht kennen.
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
Schaltfläche [Schienen], um zum Anfang der Seite zurückzukehren
[Android] Listet alle Einstellungselemente auf dem Einstellungsbildschirm auf
Wenn das Ruby on Rails-Terminal zurückrollt
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Ruby on Rails] Ein Memorandum mit Layoutvorlagen
[Ruby on Rails] Nachbearbeitungsfunktion (Aktualisieren, Löschen)
[Ruby on Rails] Individuelle Anzeige von Fehlermeldungen
[Ruby on Rails] So machen Sie das Linkziel zu einem Teil der angegebenen ID
[Ruby on Rails] Implementieren Sie ein Kreisdiagramm, das den Prozentsatz der Farben angibt
[Ruby on Rails] So japanisieren Sie die Fehlermeldung des Formularobjekts (ActiveModel)
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
[Ruby on Rails] Asynchrone Kommunikation der Posting-Funktion, Ajax
So löschen / aktualisieren Sie das Listenfeld von OneToMany
Listen Sie den Inhalt von Kategorien auf, die mit Active Hash erstellt wurden
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Ruby on Rails] So ändern Sie den Spaltennamen
[Rails] So erhalten Sie den Inhalt starker Parameter
Erklärung von Ruby auf Schienen für Anfänger ⑥ ~ Erstellung der Validierung ~
Erklärung von Ruby on Rails für Anfänger ② ~ Links erstellen ~
(Ruby on Rails6) Reflektiert den veröffentlichten Inhalt aus dem Formular
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Flash-Implementierung ~
[Ruby on Rails] Implementierung einer Validierung, die nur funktioniert, wenn die Bedingungen erfüllt sind
Ruby on Rails Lernrekord -2020.10.03
Ruby on Rails Lernrekord -2020.10.04