2016-12-06 29 views
0

こんにちは私はレール上で作業しています。コメントをフォームに送信するときにajaxリクエストを作成して、結果がコメントのリストに追加されるようにしています。私はこのビデオのおかげでうまくいっている:https://www.youtube.com/watch?v=K-sns5tNdTY2つの異なるAJAXフォームが機能しない

後で新しいモデルで実装したコメントに回答を追加し、それぞれのコメントにcoffeescriptを付けて回答とその特定のコメントに答えるフォームを表示することにしました。それはお尻のような痛みでしたが、それは最終的に動作するようになった。

私の回答はうまくいきましたが、コメントフォームはAJAXで機能していません。コメントは投稿されていますが、コメントリストには追加されていません。

クロムに検査するとき私は何を取得することは、コンソールのエラーです:

jquery.self-bd7ddd3 ...の.js体= 1:?10255 POST 500(内部サーバーエラー)

方法Iこれは、コメントやフォーム(それはスペイン語であるために申し訳ありませんが)レンダリング:

<div id="seccion-comentarios" class="border-element-sm-div" style="overflow: hidden"> 
        <h3 style="width: 500px">Comentarios</h3> 
         <div id="comentarios"> 
          <%= render @comentarios %> 
         </div> 
        <% if @comentarios.count <= 0 %> 
         <p style="font-style: italic; color: grey; margin-left: 10px"> Aún no hay comentarios. Haz uno!</p> 
        <% end %> 
        <% if usuario_signed_in? %> 
        <div style="overflow: auto"> 
         <%= render :partial => 'comentarios/form' %> 
        </div> 
        <% end %> 
       </div> 

これは私のコメントのためのフォーム(ビュー/ comentarios /フォーム)であります

そして、これは私がこのレンダリング各コメントのためにその後、その内部のビュー/ comentarios

$('#comentarios').append($("<%= j render @comentario %>").hide().fadeIn(500)); 
$('#comentario_texto').val(""); 

ためcreate.js.erbです:私は、それぞれの答えとは、このフォームをレンダリング

  <div class="border-gau-sm" style="overflow: auto"> 
       <table > 
        <tr> 
         <td height="60" style="min-width: 60px; vertical-align: top"> 
          <div class="image-container-nav"> 
           <% if Usuario.find(comentario.usuario_id).foto.presence %> 
           <%= image_tag Usuario.find(comentario.usuario_id).foto, title:"FotoUsuario", class:"img-sm"%> 
           <% else %> 
           <%= image_tag "foto_stock.png", title:"FotoUsuario", class:"img-sm"%> 
           <% end %> 
          </div> 
         </td> 
         <td>     
          <div style="margin-left: 5px;"> 
           <p style="font-size: 16px"><b><%= link_to Usuario.find(comentario.usuario_id).nombre.capitalize+" "+Usuario.find(comentario.usuario_id).apellido.capitalize, usuario_path(:id => comentario.usuario_id)%></b></p> 
           <p style="font-size: 11px; margin-top: -15px; font-style: italic; color: grey"> <%= comentario.created_at.strftime("%d/%m/%Y %H:%M") %> </p> 
           <p style="margin-top: -10px"><%= comentario.texto%></p> 
          </div> 
         </td> 
        </tr> 
       </table> 
       <div style="float: right; margin-top: -10px; margin-bottom: -2px;"> 
        <% if (current_usuario.id == comentario.usuario_id)%> 
        <%= link_to "Eliminar", comentario, method: :delete, data: {confirm: '¿Esta seguro de eliminar este comentario?'}, class: 'btn btn-danger btn-xs' %> 
        <% end%> 

        <a class= "respuestas-link btn btn-primary btn-xs" data-section-id="respuestas-seccion-<%=comentario.id%>" href="#"> 
         Respuestas 
         <span class="caret" style=""></span> 
        </a> 
       </div> 
       <section id="respuestas-seccion-<%=comentario.id%>" style="display: none"> 
        <br/> 
        <div> 
         <div id="seccion-respuestas" style="overflow: auto"> 
          <% respuestas = comentario.answers %> 
          <div id="respuestas-<%=comentario.id%>"> 
           <%= render respuestas %> 
          </div> 
         </div> 
         <div style="overflow: auto"> 
          <%= render :partial => 'answers/form', :locals => {:coment => comentario} %> 
         </div> 
        </div> 
       </section> 
      </div> 

を各コメント:/views/answers/create.js.erbで

<%= form_for @respuesta , remote: true do |f| %> 

    <%= f.hidden_field :comentario_id, value: coment.id%> 
      <%= f.label :texto, "Escribe una respuesta:" %> 
      <br/> 
      <textarea required="required" class="form-control" style="width: 99%; max-width: 99%" name="answer[texto]" id="answer_texto_<%=coment.id%>"></textarea> 

     <div style="float: right; padding-top: 10px; margin-right: 1%"> 
      <input type="submit" name="commit" value="Enviar" class="btn btn-primary btn-xs"> 
     </div> 

<% end %> 

そして、それはこのcreate.js.erbを通じてAJAXを通じて取り組んます

$('#respuestas-' + <%= @respuesta.comentario.id %>).append($("<%= j render @respuesta %>").hide().fadeIn(500)); 
$('#answer_texto_' + <%= @respuesta.comentario.id %>).val(""); 

最後に、私は私が望む/ comentarios/_comentario.html.erbに <%= render :partial => 'answers/form', :locals => {:coment => comentario} %>行を削除しようとしたとコメントフォームがうまく動作することを言いたいです。 私はそれが奇妙なのは、ページ内の回答のための多くのフォームがあり、それらのすべてがコメントフォームを除いて、互いに干渉することなく同時に働いているからです。 お時間をいただきありがとうございました。

答えて

0

私はエラーのより良い説明を持っていたXHR、ネットワークのクロムで検査することで、それを働いた:Comentarios#で

と、ArgumentErrorそれは@respuestaでめちゃくちゃにされた

Showing /app/views/answers/_form.html.erb where line #1 raised: First argument in form cannot contain nil or be empty

を作成私は他のフォームに使っていましたので、@ respuesta.newをComentariosのコントローラのどこかに追加しました。

関連する問題