Гуглил. Нашел способ в этой статье, но не помогло.
часть вьюхи
<%= link_to 'Destroy', client, method: :delete, data: { confirm: 'Are you sure?' } %>
<%= link_to 'Destroy', client_path(client), method: :delete, data: { confirm: 'Are you sure?' } %>
Destroy
Destroy
первые два способа просто показывают клиента, но не удаляют его, последние два генерируют Routing Error
No route matches [GET] "/clients/2/destroy" или No route matches [GET] "/clients/2/delete"
часть контроллера
def destroy
@client.destroy
respond_to do |format|
format.html { redirect_to clients_url }
format.json { head :no_content }
end
end
команда rake routes выдает
Ответ
3-й и 4-й способы потребуют от вас написания дополнительного кода в контроллере, но я бы их не использовал. Они семантически некорректны - GET-запросы не должны менять ресурс. В случае с удалением ресурса, целесообразно использовать DELETE-запросы.
2-й способ в вашем случае идентичен первому, так как в роутах у вас указано resources :clients без нестандартных параметров и без дополнительной вложенности.
1-й способ написан корректно, но чтобы он работал - вам нужно подключить в проекте (в application.js) небольшое js-решение от Rails:
Для Rails 5.1 это rails-ujs
Для Rails ранних версий - jquery_ujs
Подключите нужную библиотеку в вашем application.js
//= require rails-ujs
, и убедитесь, что в вашем собственном javascript коде нет ошибок, так как их наличие может мешать выполнению кода в rails-ujs. Обычно такие ошибки можно увидеть в инспекторе объектов вашего браузера (например в Google Chrome на вкладке Console).
Комментариев нет:
Отправить комментарий