更新,关闭弗兰克在下面写的内容:
在我的帖子的节目视图中,我有:
<span id="commentsPartial">
<%= render 'comments' %>
</span>
在部分评论中我有:
<% @comments.each do |comment| %>
<%= comment.description %>
<% end %>
<br/>
<%= render '/comments/form' %>
在我的形式中,我有:
<%= form_for [@comment], :remote => true do |f| %>
<% if @comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@comment.errors.count, "error") %> prohibited this comment from being saved:</h2>
<ul>
<% @comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.text_area :description, :class => "forms", :style => "width:80%;height:120px;"%>
</div>
<div class="actions" style="margin-top:10px;">
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :post_id, :value => @post.id %>
<%= f.submit :class => "button-style" %>
</div>
<% end %>
我的观点/评论/ create.js.erb页面有:
$("#commentsPartial").html("<%= escape_javascript(render('comments')) %>");
当我提交新评论时 - 它已成功创建。然而,页面保持不变。当我在firebug中观看时,我看到评论已创建,并且在帖子上有一个调用,它会返回成功 - 即使页面没有更新...非常困惑
答案 0 :(得分:2)
我认为你正在遵循错误的方法并且想到太多的jQuery而不是“轨道方式”来做到这一点。
您可以将选项:remote => :true
传递给form_tag或form_for,以告诉rails使用ajax。
您可能希望将评论嵌套到另一个模型中(google:嵌套路由),然后在
中创建一个文件app / views / comments / create.js.erb whcih是这样的:
$("#comments").prepend("<%= escape_javascript render(@comment) %>");
$('#comments_count').html('<%= pluralize(@comment.image.comments.count, "Comment") %>');
$("#comment_body").val("");
$("#comments .comment_body:first").effect("highlight", { color:"#D3ECF4"}, 3000);
这里指定了如何更新成功视图。
在您的控制器中,您可以使用:
def create
@comment = Comment.create!(params[:comment])
end
和视图类似:
<div id="comments">
<%= render @comments %>
</div>
<% form_for [@image, Comment.new], :remote => true do |f| %>
<%= render 'comment_fields', :f => f %>
<% end %>
假设您想对图像发表评论。
my _comment_fields.html.erb partial然后看起来像这样:
<p id="new_comment" class="add_comment">
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :image_id, :value => @image.id %>
<%= f.label :body, "leave a comment" %><br />
<%= f.text_area :body, :rows => 5, :cols => 25 %>
</p>
<p>
<%= f.submit "Add Comment" %>
</p>
这是rails用来轻松处理javascript的方式。一个很好的资源是this screencast。