1

我有一个简单的应用程序,其中包含有很多评论的帖子。

我可以使用以下表格从帖子#show 创建评论。

<%= form_for @comment, :remote => true, :html => {:'data-type' => 'html', :id =>                 'create_comment_form' }, :'data-update-target' => 'comments-container'$
    <%= f.text_area :content %>
    <%= f.hidden_field :post_id, :value => @post.id %>
    <%= f.submit 'Submit', :disable_with => 'Please wait...', :class => 'submit' %>
<% end %>

然后我显示评论

<div id="comments-container">
  <%= render "posts/comments"  %>
</div>

它循环通过@post.comments。

提交表单时是否可以更新@post.comments 并重新呈现部分内容?

4

2 回答 2

4

您目前是否从您的posts#create操作中渲染任何内容?无论哪种方式,您都需要像@jvnill 所说的那样呈现一个create.js.erb(在其中创建此文件):app/views/posts/

def create
  # do your thang..
  respond_to do |format|
    format.js do
      # any stuff you want to do when responding to JS
    end
  end
end

这将自动呈现create.js.erb,应该是这样的:

$('#comments-container').html('<%= escape_javascript(render "posts/comments") %>');

编辑-您遇到了您描述的问题,render因为您尝试从资产进行渲染。把它放在你的views目录中。

于 2013-03-06T09:51:09.893 回答
2

有可能做到这一点。在create.js.erb,尝试

$('#comments-container').html('#{escape_javascript render('posts/comments')}')

确保声明了您在部分内部使用的任何实例变量。

更新:更好的方法是在 div 的末尾附加评论。

于 2013-03-06T09:19:48.900 回答