Оказывается, это плохая идея возиться с собственным методом удаления / обратным вызовом по разным причинам.Мой обходной путь заключается в следующем:
В вашем представлении есть кнопка "удалить" с некоторыми значениями данных JS:
#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 открывает модальное окно.Внутри этого есть еще одна кнопка «удалить» с установленным «удаленным», поэтому действие будет использовать JS.
#delete button in modal window
link_to "delete", post_path(0),
:method => :delete,
:class => "btn primary closeModal",
:remote => true
CloseModal - это еще один класс для меня, чтобы узнать, когда закрывать модальное окно начальной загрузки.Я добавил дополнительную функцию для этого в моем application.js .Обратите внимание, что по умолчанию путь имеет нулевое значение, мы добавим реальный идентификатор записи, который будет удален через JS, на следующем шаге с помощью параметра «data-id»:
#application.js
$('a.delete_post').live('click', function(){
_target = $(this).data('id');
$('#YOUR_MODAL_LAYER .primary').attr('href', '/posts/' + _target);
});
Действие уничтожить в нашем контроллере сообщений будет использовать JS для рендеринга анимации для удаленного сообщения:
#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
Вставьте здесь эффекты, как вам угодно.В этом примере мы просто затеняем удаленный пост:
#views/posts/destroy.js
$("div#post-<%= params[:id] %>").fadeOut();
В целом это работает очень гладко!