2017-01-02 8 views
0

最初の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.erbdestroy.js.erbファイルを作成しました。

$("#atpenlist_form").html("<%= escape_javascript(render('users/atpdiscard')) %>"); 
$("#atp_count").html('<%= current_user.atp_ranks.count %>'); 

app/view/users/_atpenlist.html.erbapp/view/users/_atpdiscard.html.erbパーシャルの各形態(form_for始まる上記のコードの同じ厳密な部分)を含む:以下
app/views/atp_selections/create.js.erbファイルです。

私は、ホーム・ページの元のコードでは、私は明示的にフォームのために全体のコードが含まれていなかったが、私はちょうどパーシャルをレンダリングすることを言わなければなりません。これはうまくいきませんでした。レールは変数またはメソッドを見つけることができなかったことを私に警告しました​​は私には何らかの理由で反復で使用されていました。だから私はパーシャルをレンダリングすることを辞さなくてはならず、コード全体を含めることに決めました。私は、フォームを送信した結果を見るためにページを更新する必要があります。

問題は、Ajaxが動作しないということになりました。私は自分のコードをチェックして、エラーや説明を見つけることができませんでした。

+0

tennis_playerはあなたhome.htmlのローカル変数である、あなたのコントローラ&使用中のテニスプレーヤーオブジェクトを設定

$("#atpenlist_form").html("<%= escape_javascript(render('users/atpdiscard'), locals: {tennis_player: your_tennis_player_object}) %>"); 

ようjs.erbでそれを渡す必要があります。 erb –

答えて

1

​​は、home.html.erbのローカル変数です。
だから、上記のjs.erbに

+0

tennis_playerは反復の変数です。反復のオブジェクトは@atp_ranks = AtpRank.limit(100)です。これはホームページのコントローラに設定されています(これはstatic_pagesコントローラと呼ばれています)。 js.erbの中で 'my_tennis_player_object'として何を使用するのですか?ローカル:{tennis_player:@atp_ranks}は動作しません。 – Asarluhi

関連する問題