Кнопка Delete выполняет действие показа вместо действия удаления в Rails 5.1

1

Я пробовал некоторые решения для этого, но я не могу заставить его работать правильно. Я следую руководству Джордана Хадженса по 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 для поиска ошибок. Но я не мог найти. (я действительно смотрю в нужное место?)

В этом тесте я попытался запустить 2x это: нажмите кнопку "удалить", а затем вернитесь в индекс блога

Я полностью потерялся здесь. Я не знаю, что еще я могу сделать, чтобы найти ошибку. Не могли бы вы мне помочь?

Спасибо,

Bruno

  • 0
    Вам не нужен remote: true в вашей ссылке?
  • 0
    вы можете показать свои рейковые маршруты?
Показать ещё 1 комментарий

4 ответа

0

Я только что провел весь день по аналогичной проблеме и решил ее. В то время как вопрос старый, я думал, что записал это здесь для всех, кто борется с этим, поскольку я предполагаю, что он снова появится.

Причина (в моем случае): метод 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. Как только я это заметил и удалил, я снова занялся бизнесом.

0

Я предполагаю, что ваш код находится внутри цикла.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

0

Является ли эта часть вашего кода внутри каждого? чтобы пройти блог, чтобы удалить, вы должны дать ему. <%= 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 %>
0

Я верю, что с вашим параметром пути на вашей ссылке возникла ошибка:

<%= link_to 'Deletar Post', blog, method: :delete, data: { confirm: 'Deseja confirmar a exclusão do post?' } %>

Этот второй "блог" кажется мне странным. blog_path что это будет blog_path или blog_url. Можете ли вы попробовать это?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню