在Rails 3中使用ajax渲染部分

时间:2013-03-06 09:16:21

标签: ruby-on-rails ajax

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

我可以使用以下表单从帖子#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.com并在提交表单时重新呈现部分内容?

2 个答案:

答案 0 :(得分:4)

您目前是否通过posts#create动作渲染了任何内容?无论哪种方式,您都希望呈现create.js.erb(在app/views/posts/中创建此文件),如@jvnill所说:

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目录中。

答案 1 :(得分:2)

可以这样做。在create.js.erb中,尝试

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

确保声明在partial中使用的任何实例变量。

更新:更好的方法是在div的末尾添加注释。