Ruby on rails Ajax delete for comment没有重新加载部分+;轨道3.2
我有ajax评论提交和删除,提交工作完美,但删除不工作 以下是我的密码:- 控制器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?
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是否应在评论视图中?