0

我试图通过 Ajax 破坏评论。在我的应用程序中,我的评论模型使用了多态关联。使用下面的代码成功删除评论(在数据库中)。但是,当我调用 destroy.js.erb 时,它什么也没做,我认为问题在于 dom_id 与 HTML id 不匹配,因此它没有更新。我想我正在经历@mu_is_too_short 在回答这个问题时所表达的同样的事情。不过,我需要有关如何解决此问题的帮助。我不知道解决方案是否涉及 a) 以某种方式将局部变量注释传递给 destory.js.erb 或 b) 另一个解决方案。

路线.rb

resources :feeds do
  resources :comments
end

销毁.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
4

1 回答 1

0

从外观上看,@comment 将在您到达 destroy.js.erb 时包含一条评论,因为您在此之前在控制器中设置了它,所以我认为它与引用的答案没有任何关系。我想知道这是否是由于您的 id 周围缺少引号引起的:<div id=<%= dom_id(comment) %> class="comment">...我怀疑如果您更正此问题以及任何其他相关的 HTML 验证错误,它将开始工作。

于 2012-09-06T06:49:02.177 回答