最初の100人のAtpテニスプレーヤーを含むAtpRank
モデルがあります。
私の目標は、テニスプレーヤーのリストを選択するのに役立つ各プレーヤーのボタンとともに、すべてのテニスプレーヤーとその属性をリストにしたテーブルをビュー内に作成することです。 home.html.erb
コードは以下の通りです:Ajaxが繰り返し動作しない
<% @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 %>
あなたが見ることができるように、フォームはAjaxがform_for
ヘルパーにremote: true
を設定した使用しています。 リクエストはatp_selections
コントローラで処理されます。 destroy
アクションがatpdiscard
方法の代わりatpenlist
方法を使用
current_user.atpenlist(tennist)
respond_to do |format|
format.html { redirect_to root_url }
format.js
end
:以下このコントローラの作成動作の抽出物です。
app/views/atp_selectionsで私はcreate.js.erb
とdestroy.js.erb
ファイルを作成しました。
$("#atpenlist_form").html("<%= escape_javascript(render('users/atpdiscard')) %>");
$("#atp_count").html('<%= current_user.atp_ranks.count %>');
app/view/users/_atpenlist.html.erb
とapp/view/users/_atpdiscard.html.erb
パーシャルの各形態(form_for
始まる上記のコードの同じ厳密な部分)を含む:以下
はapp/views/atp_selections/create.js.erb
ファイルです。
私は、ホーム・ページの元のコードでは、私は明示的にフォームのために全体のコードが含まれていなかったが、私はちょうどパーシャルをレンダリングすることを言わなければなりません。これはうまくいきませんでした。レールは変数またはメソッドを見つけることができなかったことを私に警告しましたは私には何らかの理由で反復で使用されていました。だから私はパーシャルをレンダリングすることを辞さなくてはならず、コード全体を含めることに決めました。私は、フォームを送信した結果を見るためにページを更新する必要があります。
問題は、Ajaxが動作しないということになりました。私は自分のコードをチェックして、エラーや説明を見つけることができませんでした。
tennis_playerはあなたhome.htmlのローカル変数である、あなたのコントローラ&使用中のテニスプレーヤーオブジェクトを設定
ようjs.erbでそれを渡す必要があります。 erb –