Ajax with Polymorphic Association(Destroy&Create)

我在rails应用程序中与dailyposts和comments有多态关联

一切都在数据库中工作正常,但当我尝试将Ajax添加到Destroy Action(我使用本教程http://railscasts.com/episodes/136-jquery-ajax-revised )….它不起作用除非我刷新页面。 (但我的警报在destroy.js.erb中有效)

我知道我的错误在destroy.js.erb中

新手Rails …请帮忙:)

这是我的代码……

ROUTES

resources :dailyposts do resources :comments end 

CONTROLLERS

 ##Dailyposts class DailypostsController  :created_at) @comment = Comment.new end end ##Comments class CommentsController < ApplicationController before_filter :load_commentable respond_to :html, :js def create @comment = @commentable.comments.create(params[:comment]) @comment.user = current_user if @comment.save respond_to do |format| format.html { redirect_to @commentable } format.js end else redirect_to @commentable, notice: "Comment can't be blank." 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 private def load_commentable resource, id = request.path.split('/')[1, 2] @commentable = resource.singularize.classify.constantize.find(id) end end 

VIEWS

Dailypost show.html.erb

  

_comment.html.erb

 
##Here I am passing remote: true for ajax |

destroy.js.erb

 ##alert is working alert('ajax works!'); $('#').remove(); 

日志

 Started DELETE "/dailyposts/11/comments/133" for 127.0.0.1 at 2013-08-04 23:06:31 -0700 Processing by CommentsController#destroy as JS Parameters: {"dailypost_id"=>"11", "id"=>"133"} Dailypost Load (0.3ms) SELECT "dailyposts".* FROM "dailyposts" WHERE "dailyposts"."id" = ? ORDER BY dailyposts.created_at DESC LIMIT 1 [["id", "11"]] User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'sgFH2XeZWEXCcjxiAwgfXg' LIMIT 1 Comment Load (0.2ms) SELECT "comments".* FROM "comments" WHERE "comments"."id" = ? LIMIT 1 [["id", "133"]] Dailypost Load (0.1ms) SELECT "dailyposts".* FROM "dailyposts" WHERE "dailyposts"."id" = 11 ORDER BY dailyposts.created_at DESC LIMIT 1 (0.1ms) begin transaction Comment Load (0.1ms) SELECT "comments".* FROM "comments" WHERE (comments.ancestry like '133/%' or comments.ancestry = '133') SQL (0.4ms) DELETE FROM "comments" WHERE "comments"."id" = ? [["id", 133]] (2.3ms) commit transaction Rendered comments/destroy.js.erb (0.7ms) Completed 200 OK in 25ms (Views: 10.3ms | ActiveRecord: 3.9ms) 

试试这个:

Dailypost show.html.erb

  
<%= render @comments %>

_comment.html.erb

  
<%= comment.content %>

create.js.erb

  $('<%= escape_javascript(render(:partial => @comment))%>').appendTo('#comments').hide().fadeIn(); 

destroy.js.erb

  $('#<%= dom_id(@comment) %>').remove(); 

重定向正在打破响应。 尝试将其更改为redirect_to( :back ) unless request.xhr?

问题出在destroy.js.erb ,第二行不起作用,因为没有像edit_comment_1格式为edit_comment _(:id)的id。

_comment.html.erb ,添加一个id为.js.erb使用的id的相应div

 
<%= link_to comment.user.username, comment.user %> <%= comment.content %>
<% if current_user?(comment.user) %> <%= link_to content_tag(:i, "", class: "icon-trash icons"), [@commentable, comment], method: :delete, data: { confirm: "Are you sure?" }, title: "Delete", remote: true %> | <% end %>