我试图通过Ajax销毁评论。在我的应用程序中,我的评论模型使用多态关联。注释使用以下代码成功删除(在数据库中)。但是,当我调用destroy.js.erb时,它没有做任何事情,我认为问题是dom_id与HTML id不匹配,所以它没有更新。我想我正在经历与answer to this question中明确指出的@mu_is_too_short相同的事情。我需要帮助解决这个问题。我不知道解决方案是否涉及a)以某种方式将局部变量注释传递给destory.js.erb或b)另一种解决方案。
的routes.rb
resources :feeds do
resources :comments
end
destroy.js.erb
$('#<%= dom_id(@comment) %>')
.fadeOut ->
$(this).remove()
_comment.html.erb
<div id=<%= dom_id(comment) %> class="comment">
<em>on <%= comment.created_at.strftime('%b %d, %Y at %I:%M %p') %></em>
<%= link_to "Remove", [@commentable, comment], :method => :delete, :remote => true %>
<%= simple_format comment.content %>
</div>
馈送/ show.html.erb
<div id="comments">
<%= render @comments %>
</div>
评论控制器
class CommentsController < ApplicationController
def create
@comment = @commentable.comments.new(params[:comment])
if @comment.save
respond_to do |format|
format.html { redirect_to @commentable }
format.js
end
else
render :new
end
end
def destroy
@comment = Comment.find(params[:id])
@commentable = @comment.commentable
if @comment.destroy
respond_to do |format|
format.html { redirect_to @commentable }
format.js
end
end
end
end
提供控制器
class FeedsController < ApplicationController
def show
@feed = Feed.find(params[:id])
@commentable = @feed
@comments = @commentable.comments
@comment = Comment.new
end
end
答案 0 :(得分:0)
从它的外观来看,@ tell会在你到达destroy.js.erb时包含一个注释,因为你在之前的控制器中设置它,所以我不认为它与引用的答案有任何关系。我想知道这是否是由于你的id周围缺少引号引起的:<div id=<%= dom_id(comment) %> class="comment">
...我怀疑如果你纠正这个,以及任何其他相关的HTML验证错误,它将开始工作。