Я пробовал некоторые решения для этого, но я не могу заставить его работать правильно. Я следую руководству Джордана Хадженса по Rails. Я создал структуру "blog" через scafold, и изначально все работало правильно. Теперь я не могу узнать, что происходит. Я использую Rails 5.1.
Каждый раз, когда я нажимаю кнопку "удалить блог", он использует действие GET, а не DELETE.
Когда вы смотрите на консоль сервера, я вижу, что это действие шоу, а не удаление.
Кроме того, я просмотрел свой код и не смог найти никаких ошибок. На самом деле, я не знаю, где бы я мог поместить инструменты отладки, чтобы выяснить проблему.
_blog.html.erb
<%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
blogs_controller.rb
def destroy
@blog.destroy
respond_to do |format|
format.html { redirect_to blogs_url, notice: 'Seu post foi excluído com sucesso.' }
format.json { head :no_content }
end
end
Кроме того, я думаю, что маршруты настроены правильно.
Мой файл application.js
//= require rails-ujs
//= require turbolinks
//= require_tree .
//= require jquery3
//= require popper
//= require bootstrap-sprockets
//= require jquery_ujs
Кроме того, у меня есть jquery-rails как драгоценный камень
gem 'devise', '~> 4.3'
gem 'bootstrap', '~> 4.0.0.beta2.1'
gem 'jquery-rails'
gem 'brunocruz_view_tool', '~> 0.1.0'
gem 'petergate', '~> 1.8'
Это странно, потому что кнопка "удалить" работает правильно, поэтому я прекратил ее тестировать некоторое время назад. Теперь я не могу найти, что заставило его остановиться.
Я также попытался запустить действие destroy на консоли. И это сработало.
Уничтожить действие с помощью консоли rails
Я запустил консоль JavaScript для поиска ошибок. Но я не мог найти. (я действительно смотрю в нужное место?)
Я полностью потерялся здесь. Я не знаю, что еще я могу сделать, чтобы найти ошибку. Не могли бы вы мне помочь?
Спасибо,
Bruno
Я только что провел весь день по аналогичной проблеме и решил ее. В то время как вопрос старый, я думал, что записал это здесь для всех, кто борется с этим, поскольку я предполагаю, что он снова появится.
Причина (в моем случае): метод delete игнорируется, так как UJS не отправляется в браузер. В процессе обновления двух приложений (один от 4.2 и один из 5.1) до Rails 5.2 вчера я закончил с отсутствием UJS. Я признаю, что я запускал многочисленные обновления пакетов и установки пакетов и отбирал несколько драгоценных камней, которые я не хотел использовать. Возможно, это создало проблему для меня.
Это происходило только в моей секции admin, где у меня были пользовательские манифесты для JS и CSS (admin.js и admin.css, соответственно), которые были правильно указаны в макете и были правильно скомпилированы, как описано в официальном руководстве:
В приложении /views/layouts/admin.html.erb:
<%= javascript_include_tag 'admin', 'data-turbolinks-track': 'reload' %>
В приложении /assets/javascripts/admin.js:
//= require jquery
//= require rails-ujs
//= require_tree .
Загадочно не было проблемы с манифестом CSS, который служил правильно.
С другой стороны, изменение в моем манифесте актива JS (Rails 5.1: https://guides.rubyonrails.org/asset_pipeline.html) из
//= require jquery_ujs
в
//= require rails-ujs
(обратите внимание, что подчеркивание теперь дефис), вероятно, было немного красной селедки, так как я искал эти ссылки безрезультатно.
Проблема была вызвана пустым файлом admin.coffee в той же папке, что и мой admin.js. Конвейер актива должен предпочесть использовать это вместо файла.js с тем же именем. У меня нет необходимости в CoffeeScript. Как только я это заметил и удалил, я снова занялся бизнесом.
Я предполагаю, что ваш код находится внутри цикла.each, и поэтому используется "блог", вместо этого здесь вы хотите получить путь к действию удаления и добавить идентификатор элемента, который хотите уничтожить. Просто угадывайте здесь, так как вы не предоставили много информации.
если ваши маршруты выглядят так:
resources :blogs, only: [:destroy]
Тогда ваш путь - это prob, blog_path, и если вы посмотрите на свои маршруты (я обычно перехожу на localhost: 3000/маршруты, чтобы увидеть все маршруты, на которых вы можете найти свой маршрут и что ему нужно.)
Поэтому я считаю, что это должно выглядеть так:
<%= link_to 'Deletar Post', blog_path(blog), method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
Кроме того, это не пропущенное имя на кнопке, если оно должно удалить блог? : D
Является ли эта часть вашего кода внутри каждого? чтобы пройти блог, чтобы удалить, вы должны дать ему. <%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
пример
<% @pops.each do |pop| %>
#fields of pop, in your case is blog
<%= link_to 'Destroy', pop, method: :delete, data: { confirm: 'Are you sure?' } %>
#in the scaffold, the fields are generated inside a table, but it is not
#the line that passes a blog information that you want to delete, is
#each. understood?
<% end %>
Я верю, что с вашим параметром пути на вашей ссылке возникла ошибка:
<%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>
Этот второй "блог" кажется мне странным. blog_path
что это будет blog_path
или blog_url
. Можете ли вы попробовать это?
remote: true
в вашей ссылке?