我有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 delete首次运行然后再次停止工作。
答案 0 :(得分:1)
你不必要地使一切变得复杂。您的销毁控制器可以很简单,如下所示:
def destroy
@status_update = StatusUpdate.find(params[:id])
if @user == current_user
unless @status_update.destroy
redirect_to @user
end
end
end
在您的观看次数中,请尝试使用导轨link_to "action", action_path, remote: true
将您的html视图文件命名为destroy.js.erb。
这些可以是它的内容:
$('.status-partial').html(<%= @user.generate_new_content.to_s %>);
Rails将负责其余部分。单击链接时,类“status-partial”的元素将其html内容替换为“一些新内容”。
分离HTML和AJAX响应是一种很好的做法,Rails提供了一种方便的方法。使用它。
答案 1 :(得分:0)
我认为如果你愿意的话会更好
respond_with do |format|
format.js
然后有一个名为destroy.js.erb
的文件来放置删除后应该触发的javascript
答案 2 :(得分:0)
问题在于javascript文件中使用的.on
语法,它不像.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('');
})
});
解决了这个问题。