您好我正在使用rails并且一直在尝试在提交注释表单时发出ajax请求,因此结果会附加到注释列表中。由于这段视频,我已经开始工作了:https://www.youtube.com/watch?v=K-sns5tNdTY。
后来我决定添加我的评论的答案,我用一个新模型实现了这个评论,并在每个评论上做了一个coffeescript来向我展示答案和一个表格来回答那个具体的评论。这是一种痛苦的屁股,但最终让它工作。
现在我的答案工作得很好,但是评论表单没有通过AJAX工作,评论已经发布,但没有附加到评论列表中。
检查chrome时,我得到的是控制台错误:
jquery.self-bd7ddd3 ... .js?body = 1:10255 POST http://localhost:3000/comentarios 500(内部服务器错误)
这是我呈现评论和表格的方式(抱歉是西班牙语):
<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>
这是我的评论表格(views / comentarios / form):
<%= form_for @comentario , remote: true do |f| %>
<%= f.hidden_field :favor_id, value: @favor.id%>
<%= f.label :texto, "Escribe un comentario:" %>
<br/>
<%= f.text_area :texto, required: true,class: "form-control", style: "width: 99%; max-width: 99%"%>
<div style="float: right; padding-top: 10px; margin-right: 1%">
<%= f.submit "Comentar", :class=>'btn btn-primary'%>
</div>
<% end %>
这是内部视图/ comentarios
中的create.js.erb$('#comentarios').append($("<%= j render @comentario %>").hide().fadeIn(500));
$('#comentario_texto').val("");
然后,对于每个评论,我都会这样做:
<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>
我为每个评论呈现每个答案和此表单:
<%= 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 %>
通过/views/answers/create.js.erb中的create.js.erb获取它通过ajax工作
$('#respuestas-' + <%= @respuesta.comentario.id %>).append($("<%= j render @respuesta %>").hide().fadeIn(500));
$('#answer_texto_' + <%= @respuesta.comentario.id %>).val("");
最后我想说我已经尝试删除了
views / comentarios / _comentario.html.erb中的<%= render :partial => 'answers/form', :locals => {:coment => comentario} %>
行和评论表单工作正常。
我发现它很奇怪,因为页面中有很多答案形式,除了评论表单之外,它们都是同时工作而不会相互干扰。
感谢您的时间,希望您能提供帮助!
答案 0 :(得分:0)
我通过在网络XHR中检查Chrome来解决这个错误:
Comentarios中的ArgumentError #create
显示/app/views/answers/_form.html.erb,其中第1行引发:首先 形式中的参数不能包含nil或为空
它正在搞乱我用于其他形式的@respuesta,所以我在Comentarios控制器的某个地方添加了一个@ respuesta.new,这就行了!