Итак, у меня есть команда destroy. Проблема в том, что я не хочу, чтобы мои пользователи могли удалять эту категорию, если она содержит элементы. Поэтому у меня есть оператор if в методе my destroy. Это работает отлично, но я использую AJAX для загрузки страницы и использования файла destroy.js.erb. Мой метод ниже:format.js с Rails
def destroy
@promotion_type = PromotionType.find(params[:id])
if Promo.find_by_promotion_type_id(params[:id]).nil?
@promotion_type.destroy
respond_to do |format|
format.html { redirect_to(promotion_types_url) }
format.js {render :layout => false }
format.xml { head :ok }
end
else
respond_to do |format|
format.js {}
end
end
end
Это мой Javascript (JQuery):
$('a.delete').click (function(){
if(confirm("Are you sure?")){
var row = $(this).closest("tr").get(0);
$.post(this.href, {_method:'delete'}, null, "script");
$(row).hide();
return false;
} else {
//they clicked no.
return false;
}
Одна из моих проблем является то, что когда-то они щелкают да, она скрывает строку и AJAX удаляет свое. Если я не скрою его, он будет удален, но поскольку страница не обновляется, похоже, что она не была удалена, поэтому я скрываю ее для эффекта. Единственная проблема с этим решением - когда я попадаю в свои категории. Я не хочу, чтобы пользователи удаляли его, если в нем есть элементы. Я не могу бросить код ruby в свой файл javascript, и я не могу (или не знаю, каким образом) метать javascript-переменные или $ (this) в файл .js.erb.
Код работает корректно по большей части, но теперь он прячет строку, даже если она не удалась. Поэтому я собирался бросить предупреждение («Невозможно удалить»); в мой файл .js.erb, но это предупреждение срабатывает независимо от того, было оно или не было удалено. Я уверен, что есть лучшее решение, чтобы сделать все это, но я этого не знаю.
Можете ли вы пойти дальше indepth? Я получил код .post с другого сайта и добавил остальные, поэтому я не уверен, как это работает. – Mike