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

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>

feeds / 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 に答える