В миналото винаги, когато исках да актуализирам част от моя изглед чрез 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"}
Което означава, че трябва да създам нов маршрут, ако искам да предам тези параметри...
Още един недостатък на всичко това е, че повтарям цялата логика за търсене и сортиране, която имам в индексния метод отново в метода за унищожаване. Сигурен съм, че това определено не е начинът да го направите.