Ich habe ein AtpRank
Modell mit den ersten 100 Atp Tennisspieler.
Mein Ziel ist es, in der Ansicht eine Tabelle zu erstellen, die alle Tennisspieler und ihre Attribute zusammen mit einer Schaltfläche für jeden Spieler auflistet, die für den Benutzer nützlich ist, um eine Liste von Tennisspielern auszuwählen. Der home.html.erb
Code ist unten:Ajax funktioniert nicht in Iteration
<% @atp_ranks.each do |tennis_player| %>
<tr id="tennist-<%= tennis_player.ranking %>">
<td class="atpranking"> <%= tennis_player.ranking %> </td>
<td class="atpname"> <%= tennis_player.name %> </td>
<td class="atppoints"> <%= tennis_player.points %> </td>
<% unless Time.now.month == 12 %>
<td>
<div id="atpenlist_form">
<% if current_user.atpenlisted?(tennis_player) %>
<%= form_for(current_user.atp_selections.find_by(atp_rank_id: tennis_player.id),
html: { method: :delete }, remote: true) do |f| %>
<%= f.submit "Dump", class: "btn btn-warning btn-sm" %>
<% end %>
<% else %>
<%= form_for(current_user.atp_selections.build, remote: true) do |f| %>
<div><%= hidden_field_tag :atp_id, tennis_player.id %></div>
<%= f.submit "Choose", class: "btn btn-primary btn-sm" %>
<% end %>
<% end %>
</div>
</td>
<% end %>
</tr>
<% end %>
Wie Sie sehen können, das Formular verwendet Ajax remote: true
im form_for
Helfer eingestellt zu haben. Anforderungen werden von der atp_selections
Controller behandelt. Im Folgenden ein Auszug aus der Wirkung dieser Controller erstellen:
current_user.atpenlist(tennist)
respond_to do |format|
format.html { redirect_to root_url }
format.js
end
Die destroy
Aktion verwendet die atpdiscard
Methode anstelle der atpenlist
Methode.
In app/views/atp_selections habe ich die create.js.erb
und destroy.js.erb
Dateien erstellt.
Unten ist die app/views/atp_selections/create.js.erb
Datei:
$("#atpenlist_form").html("<%= escape_javascript(render('users/atpdiscard')) %>");
$("#atp_count").html('<%= current_user.atp_ranks.count %>');
Jede der app/view/users/_atpenlist.html.erb
und app/view/users/_atpdiscard.html.erb
partials enthalten die jeweilige Form (exakt das gleiche Teil des Codes mit form_for
oben beginnend).
Ich muss sagen, dass ich in den ursprünglichen Code für die Homepage nicht explizit den gesamten Code für die Formulare enthalten, aber ich habe nur die Teilzahlen gerendert. Das hat nicht funktioniert: rails hat mich gewarnt, dass es die Variable oder Methode tennis_player
, die in der Iteration verwendet wurde, aus irgendeinem Grund nicht finden kann. Also musste ich auf die Darstellung der Teiltöne verzichten und entschied mich dafür, den gesamten Code einzubinden.
Das Problem ist jetzt, dass Ajax nicht funktioniert: Ich muss die Seite aktualisieren, um die Ergebnisse der Übermittlung des Formulars zu sehen. Ich habe meinen Code überprüft und konnte keine Fehler oder Erklärungen finden.
tennis_player für Sie home.html eine lokale Variable ist. erb –