Rails удаленное удаление и обновление представления через Ajax
В прошлом, когда я хотел обновить часть своего представления через Ajax, я делал следующее:
создайте частичный элемент из части, которую я хочу обновить, и дайте ему уникальный идентификатор, скажем#tracks
создать специальное действие в контроллере для этого вызова Ajax, скажем,remove_track
который обновляет все значения и т. д. и добавляетformat.js
создайте новый файл JS с тем же именем, что и действие, чтобы Rails вызывал его автоматическиremove_track.js.erb
который содержит что-то вроде:$('#tracks').html("<%=j render 'cds/show_tracks' %>");
установленremote: true
в ссылке, которая вызывает это действие.Все это нормально, но сейчас я пытаюсь удалить и обновить общийindex
просматривать с помощью обычногоdestroy
метод для гибкости, то есть я могу вызвать этот метод либо через Ajax, либо нормально. Я подумал, что это настолько распространенная вещь, что должен быть лучший способ, чем все вышеперечисленное.
Я могу получить метод уничтожения, чтобы вызвать мойdestroy.js.erb
файл, просто поместив это в контроллер:
format.js { layout: false }
и конечно же установкаremote: true
по ссылке.
то, что я не могу сделать, это получить представление, чтобы обновить. Таблица, которую я хочу обновить, заключена в элемент div с уникальным идентификатором, но, поскольку она не является частичной, она отказывается обновлять содержимое. Может быть, я что-то упустил.
Обречен ли я создавать частичное и обновлять его описанным выше способом, или есть ли более магический способ сделать это (кроме использования Turbolinks)?
Благодарю.
PS Кроме того, я только что заметил, что в этом есть дополнительный недостаток, заключающийся в том, что я не могу передать остальные параметры методу уничтожения, поскольку он передает только идентификатор объекта для уничтожения с использованием обычных маршрутов CRUD. Если я попытаюсь использоватьplatform(action: destroy)
или жеplatform(method: delete)
Я получаю ошибку:
No route matches {:action=>"destroy", :controller=>"platforms"}
Что означает, что я должен создать новый маршрут, если я хочу передать эти параметры ...
Еще один недостаток всего этого заключается в том, что я повторяю всю логику поиска и сортировки, которая у меня есть в методе index, снова в методе destroy. Я уверен, что этоточно нет способ сделать это.