Ruby on rails Ajax delete for comment没有重新加载部分+;轨道3.2

Ruby on rails Ajax delete for comment没有重新加载部分+;轨道3.2,ruby-on-rails,ajax,ruby-on-rails-3.2,Ruby On Rails,Ajax,Ruby On Rails 3.2,我有ajax评论提交和删除,提交工作完美,但删除不工作 以下是我的密码:- 控制器 def destroy @status_update = StatusUpdate.find(params[:id]) if @user == current_user if @status_update.destroy respond_with do |format| format.html do if request.xhr?

我有ajax评论提交和删除,提交工作完美,但删除不工作

以下是我的密码:-

控制器

def destroy
  @status_update = StatusUpdate.find(params[:id])
    if @user == current_user
      if @status_update.destroy
        respond_with do |format|
          format.html do
            if request.xhr?
              render :partial => "users/post_status_update", :locals => {:user => @user}, :layout => false, :status => :created
            else
              redirect_to @user
            end
          end
        end
      end
    end
  end
Javascript

$(document).ready(function(){

  $('.delete-status-update')
    .on("ajax:beforeSend", function(evt, xhr, settings){
    })

    .on("ajax:success", function(evt, data, status, xhr){
      $('.status-partial').replaceWith(xhr.responseText);

    })

});
查看

.status-partial
  -@user.status_updates.latest.limit(5).each do |status_update|
    .row-fluid.cycle-status-update{:class => cycle("dark", "light")}
      .row-fluid
        .span11
          = status_update.status
        .span1
          .delete-status-update-link
            %strong= link_to "X", [@user,status_update], :remote => true, :method => :delete, :class => "delete-status-update"
      .row-fluid
        .time-ago-in-words
          ="#{time_ago_in_words(status_update.created_at)} ago"

问题是,在我单击删除链接后,状态部分没有被替换,在刷新页面后,ajax删除第一次工作,然后它再次停止工作。

我认为如果您这样做会更好

respond_with do |format|
format.js

然后有一个名为
destroy.js.erb
的文件来放置删除后应该触发的javascript

这样做是不必要的。您的销毁控制器可以很简单,如下所示:

def destroy
  @status_update = StatusUpdate.find(params[:id])
  if @user == current_user
    unless @status_update.destroy
      redirect_to @user
    end
  end
end
在您的视图中,不要通过$.ajax调用,而是尝试rails
链接到“action”,action\u路径,remote:true

将html视图文件命名为destroy.js.erb

这些可以是其内容:

$('.status-partial').html(<%= @user.generate_new_content.to_s %>);
$('.status partial').html();
剩下的就交给Rails了。单击链接时,类为“status partial”的元素的html内容将替换为“some new content”


将HTML和AJAX响应分开是一种很好的做法,Rails提供了一种方便的方法。使用它。

问题在于
的语法。在javascript文件中使用的
上,它的工作方式与
.live
不同。将语法更改为

$(document).ready(function(){

  $(document).on("ajax:success", "#create_status_update_form", function(evt, data, status, xhr){
      $('.status-partial').replaceWith(xhr.responseText);
      $('.comment-text').val('');
    })

});

已解决问题。

destroy.js.erb是否应在评论视图中?