3

Гуглил. Нашел способ в этой статье, но не помогло.
часть вьюхи

<!-- 4 не работающих способа -->
<%= link_to 'Destroy', client, method: :delete, data: { confirm: 'Are you sure?' } %><!-- автосгенерированный скаффолдом -->
<%= link_to 'Destroy', client_path(client), method: :delete, data: { confirm: 'Are you sure?' } %><!-- предложенный [статьей][1] -->
<a href="http://localhost:3000/clients/<%= client.id%>/destroy">Destroy</a>
<!-- были мысли, что какая-то из этих ссылок сгенерируется при превращении link_to в код на html -->
<a href="http://localhost:3000/clients/<%= client.id%>/delete">Destroy</a>

первые два способа просто показывают клиента, но не удаляют его, последние два генерируют 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 выдает такие пути

Svatoslav
  • 113

1 Answers1

1

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).