Rails remoto excluir e atualizar a vista através do Ajax
No passado, sempre que eu queria atualizar uma parte da minha visão através do Ajax, fiz o seguinte:
crie uma parte parcial da parte que desejo atualizar e forneça uma ID exclusiva, digamos#tracks
criar uma ação especial no controlador para essa chamada Ajax, digamosremove_track
que atualiza todos os valores, etc. e adicionaformat.js
crie um novo arquivo JS com o mesmo nome da ação, para que o Rails o chame automaticamenteremove_track.js.erb
que contém algo como:$('#tracks').html("<%=j render 'cds/show_tracks' %>");
conjuntoremote: true
no link que chama essa ação.Tudo isso está bem, mas agora eu estou tentando excluir e atualizar um comumindex
ver usando o regulardestroy
método de flexibilidade, o que significa que eu posso chamar esse método através do Ajax ou normalmente. Eu percebi que é uma coisa tão comum que tem que haver uma maneira melhor do que todas as opções acima.
Eu posso pegar o método destroy para chamar meudestroy.js.erb
arquivo simplesmente colocando isso no controlador:
format.js { layout: false }
e, claro, definindoremote: true
no link.
o que eu não posso fazer é obter a exibição para atualizar. A tabela que quero atualizar é encerrada em uma div com um ID exclusivo, mas como não é parcial, ela se recusa a atualizar o conteúdo. Talvez eu esteja perdendo alguma coisa.
Estou condenado a ter que criar uma parcial e atualizá-lo com o método acima ou há uma maneira mais mágica de fazê-lo (além de usar Turbolinks)?
Obrigado.
PS Além disso, notei que isso tem a desvantagem adicional de não poder passar o resto dos parâmetros para o método destroy, pois ele só passa o ID do objeto para destruir usando as rotas CRUD normais. Se eu tento usarplatform(action: destroy)
ouplatform(method: delete)
Eu recebo um erro:
No route matches {:action=>"destroy", :controller=>"platforms"}
O que significa que eu tenho que criar uma nova rota se eu quiser passar esses parâmetros ...
Outra desvantagem de tudo isso é que estou repassando toda a lógica de buscas e classificação que tenho no método index novamente no método destroy. Eu tenho certeza que isso édefinitivamente não o caminho para fazer isso.