Supprimer tout le contenu de la page de liste [Ruby on Rails]

Supprimer tout le contenu sélectionné de la page de liste de contenu

Cochez une case pour chaque publication (Afficher)

Cochez une case pour chaque publication de contenu Comme Ajax n'est pas utilisé, désactivez la communication XML avec l'option form_with.

ruby:index.html.erb


<%= form_with model: @contents, url: contents_path, method: :delete, local: true do |f| %>
#local:Désactivez la communication XML avec 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 %>

Cela ajoutera une case à cocher pour chaque message

J'ai essayé de ne résumer que les options nécessaires de form_with selon le but de cette fois

python


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

Add multiple: true pour permettre l'envoi de plusieurs valeurs au contrôleur dans un tableau.

Un hash appelé contents est envoyé au contrôleur. la clé est contents_ids, value est un tableau. Et il y a content.id dans le tableau

Valeur envoyée depuis la vue


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

C'est compliqué (rires)

Mettre en œuvre des fonctions d'acquisition et de suppression de valeurs sur le contrôleur (contrôleur)

Tout d'abord, obtenez la valeur envoyée depuis View avec le paramètre strong

contents_controller.rb


def select_content_params
    ids = params.require(:content).permit(content_ids: [])
    ids.values[0]
end

1ère ligne: seuls les content_ids du contenu envoyé peuvent être utilisés, et si des données inattendues sont envoyées, elles seront ignorées. 2e ligne: extraire uniquement le tableau en utilisant la méthode des valeurs pour les identifiants Puisque la valeur à ce moment est [["1", "2"]], spécifiez [0] et extrayez uniquement ["1", "2"].

Après cela, écrivez le processus en utilisant la valeur formatée

contents_controller.rb


def select_destroy
  if select_content_params.uniq.count == 1
    redirect_to contents_url, notice: "Veuillez sélectionner l'élément à supprimer"
  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: "J'ai supprimé le favori"
  end
end

À proprement parler, les valeurs qui ne sont pas cochées dans la case à cocher sont envoyées comme 0, donc la méthode uniq est utilisée pour éliminer la duplication, et la méthode count est utilisée pour compter le nombre de valeurs dans le tableau et la branche if. Non vérifié → Seulement 0 == 1 Coché → 0 et id existe> 1

S'il n'est pas coché, il peut être plus facile de renvoyer un résultat nul, mais veuillez faire ce que vous voulez.

Paramètres grossiers

routes.rb


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

Terminé avec!

Merci de votre collaboration. Si vous avez des questions, je vous serais reconnaissant de bien vouloir demander un professeur!

Recommended Posts

Supprimer tout le contenu de la page de liste [Ruby on Rails]
[Ruby on Rails] Jusqu'à l'introduction de RSpec
Déterminez la page actuelle avec Ruby on Rails
Essayez d'utiliser l'attribut de requête Ruby on Rails
[Java] Supprimer les éléments de la liste
[Ruby on Rails] Afficher rapidement le titre de la page dans le navigateur
Une note sur la fonction de départ de Ruby on Rails
[Ruby on Rails] Création de la page de confirmation
[Ruby] Afficher le contenu des variables
[Ruby on Rails] Changez la destination de sauvegarde du recueil de gemmes * Remarque
Explication de Ruby on rails pour les débutants ⑤ ~ Modifier et supprimer la base de données ~
[Ruby on Rails] Introduction des données initiales
[Rails] Ajout de la fonction de commentaire Ruby On Rails
[Ruby] Coupez le contenu des publicités Twitter
Commande de création / suppression du contrôleur Ruby on Rails
[Ruby on Rails] Notation japonaise de l'erreur
Explication de Ruby sur rails pour les débutants ①
[Ruby on rails] Implémentation d'une fonction similaire
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
Ruby on Rails Lorsque vous ne connaissez pas la cause de la restauration lors de l'enregistrement.
Implémentation de la fonction de connexion Ruby on Rails (Session)
Bouton [Rails] pour revenir en haut de la page
[Android] Liste tous les éléments de réglage sur l'écran de réglage
Quand le terminal Ruby on Rails revient en arrière
Publiez l'application avec ruby on rails
Ruby on Rails ~ Principes de base de MVC et du routeur ~
[Ruby on Rails] Un mémorandum de modèles de mise en page
[Ruby on Rails] Fonction de post-édition (mise à jour, suppression)
[Ruby on Rails] Affichage individuel des messages d'erreur
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié
[Ruby on Rails] Implémentez un graphique circulaire qui spécifie le pourcentage de couleurs
[Ruby on Rails] Comment japonaisiser le message d'erreur de l'objet Form (ActiveModel)
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
[Ruby on Rails] Communication asynchrone de la fonction de publication, ajax
Comment supprimer / mettre à jour le champ de liste de OneToMany
Lister le contenu des catégories créées avec Active Hash
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Ruby on Rails] Comment changer le nom de la colonne
[Rails] Comment obtenir le contenu des paramètres forts
Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~
Explication de Ruby on rails pour les débutants ② ~ Création de liens ~
(Ruby on Rails6) Refléter le contenu publié à partir du formulaire
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
[Ruby on Rails] Implémentation de la validation qui ne fonctionne que lorsque les conditions sont remplies
Record d'apprentissage de Ruby on rails -2020.10.03
Record d'apprentissage Ruby on rails -2020.10.04