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)
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.
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