Извините, если это глупый вопрос, но я только начинаю работать с Rails и jQuery. У меня такой сценарий:
У меня 3 класса: contacts, companies и contact_company_joins (ccj).
Для всех трех классов я создал models, controller и views. Очевидно, что контакты и
компании подключаются через объединенную таблицу ccj (с использованием has_many :through).
contacts <-> contact_company_joins <-> companies
В представлении "показать" моего контакта я хочу отобразить таблицу, в которой перечислены все компании, к которым подключен контакт (и некоторая дополнительная информация о самой компании, например, номер телефона). По мнению моей компании, я хочу сделать то же самое, но на этот раз с данными о сотрудниках (контактах). Каждая строка таблицы имеет типичную ссылку «удалить» в конце, функцию которой я теперь подключил к одной из моих функций jQuery:
$('.edit_contact_join_delete').livequery('click', function() {
var $deleteButton = $(this);
var answer = confirm("Sure?");
var dataloc = "&_method=delete";
if (answer) {
$.ajax({
type : "POST",
url : this.href,
data : dataloc,
success: function(result) {
}
});
}
return false;
});
В обоих представлениях (контакт и компания) действие удаления приводит меня к функции уничтожения контроллера ccj. Что я хочу сделать сейчас, так это обновить или повторно визуализировать таблицу отдельного сайта (контакта или компании), который вызывает функцию удаления, но ТОЛЬКО часть таблицы. Полагаю, я должен реализовать это в функции "успеха" выше? Но опять же, даже если я верну что-то из контроллера ccj (отрисованный фрагмент?) ... это будет одинаково как для контакта, так и для представления компании, верно? Как я могу убедиться, что после моего вызова Ajax для уничтожения объекта ccj я получаю новый объект DOM для представления моего контакта (который будет новой таблицей компании), но также получаю новую таблицу контактов, когда я выполняю вызов Ajax из мнение моей компании?
Надеюсь, все это имеет смысл :-)
С уважением,
Себастьян

Все, что вам нужно, это чтобы действие удаления возвращало успех или неудачу (подойдет даже только true или false), тогда ваш javascript может справиться с любым ответом.
Если произошел сбой, то верните сообщение об этом, если успех и связь удалены, вы можете найти родительский элемент <tr> для ссылки удаления, по которой вы щелкнули, и скрыть строку, в конечном итоге удалив ее со страницы. Например (учитывая, что ваш контроллер возвращает true, если удаление выполнено успешно, и false в противном случае):
$('.edit_contact_join_delete').livequery('click', function() {
var $deleteButton = $(this);
var answer = confirm("Sure?");
var dataloc = "&_method=delete";
if (answer) {
$.ajax({
type : "POST",
url : this.href,
data : dataloc,
success: function(result) {
if (result) {
// handle successful delete
$deleteButton.parent('tr').fadeOut().remove()
} else {
// handle failed delete
alert('Delete failed');
}
}
});
}
return false;
});