В прошлом, всякий раз, когда я хотел обновить часть своего представления через 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 вызывать мой файл 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"}
Это означает, что я должен создать новый маршрут, если я хочу передать эти параметры...
Еще одним недостатком всего этого является то, что я повторяю всю логику поиска и сортировки, которая у меня есть в методе индекса, снова в методе уничтожения. Я уверен, что это определенно не способ сделать это.