Rails custom Twitter Bootstrap modal for delete method, Problem with callback

怎甘沉沦 提交于 2019-12-03 04:01:13

Turns out it is a bad idea to fiddle with the native delete method/callback for various reasons. My workaround solution is as follows.

Have a "delete" button in your view, with some JS data values:

#delete button in view template
link_to "delete", "#", 
   :class => "delete_post", 
   "data-id" => YOUR_POST_ID, 
   "data-controls-modal" => "YOUR_MODAL_LAYER",
       #more bootstrap options here…

Bootstrap opens the modal window. Inside that, have another "delete" button with "remote" set, so the action will use JS.

#delete button in modal window
link_to "delete", post_path(0), 
   :method => :delete, 
   :class => "btn primary closeModal", 
   :remote => true  

CloseModal is another :class for me to know when to close the bootstrap modal window. I've put an additional function for that in my application.js. Note, the default path has a nil value, we'll attach the real post ID to be deleted via JS in the next step via the "data-id" param:

#application.js 
$('a.delete_post').live('click', function(){
    _target = $(this).data('id');
    $('#YOUR_MODAL_LAYER .primary').attr('href', '/posts/' + _target);
});

The destroy action in our Posts controller will use JS to render an animation for the deleted post:

#posts_controller.rb
def destroy
    @post = Post.find(params[:id])
    @post.destroy
    respond_to do |format|
       # format.html { redirect_to(posts_url) }
       format.js { render :content_type => 'text/javascript' }
    end
end

Insert here effects as you please. In this example we are simply fading out the deleted post:

#views/posts/destroy.js    
$("div#post-<%= params[:id] %>").fadeOut();

Altogether this works really smoothly!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!