В прошлом, когда я хотел обновить часть своего представления через 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
Кроме того, я просто заметил, что это имеет дополнительный недостаток: я не могу передать остальные параметры методу destroy, поскольку он только передает идентификатор объекта, чтобы уничтожить его с помощью обычных маршрутов CRUD. Если я пытаюсь использовать platform(action: destroy)
или platform(method: delete)
, я получаю сообщение об ошибке:
No route matches {:action=>"destroy", :controller=>"platforms"}
Что означает, что мне нужно создать новый маршрут, если я хочу передать эти параметры...
Еще одним недостатком всего этого является то, что я повторяю всю логику поиска и сортировки, которые у меня есть в методе индекса снова в методе destroy. Я уверен, что это определенно не способ сделать это.