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