link_to удалить URL не работает

У меня есть следующая ссылка_для удаления URL-адреса в моем приложении

<%=link_to "Delete",blog_path(@blog.id), :method => :delete, :class => "delete", :confirm => "Are you sure ?"%>  

Кажется, он не работает. Когда я нажимаю на этот URL-адрес, он просто перенаправляет меня на путь показа. Может кто-нибудь, пожалуйста, скажите мне, как это исправить. Спасибо.


person felix    schedule 12.12.2010    source источник
comment
Какой у вас маршрут (routes.rb) для блогов?   -  person aceofspades    schedule 12.12.2010
comment
попробуйте ввести rake route и показать вывод...   -  person wizztjh    schedule 20.12.2010


Ответы (8)


Вы используете jQuery? Если это так, я думаю, проблема может заключаться в том, что вы используете jQuery без обновленного файла rails.js.

Загрузите rails.js здесь: https://github.com/rails/jquery-ujs/raw/master/src/rails.js Поместите его в каталог javascripts, перезаписав файл rails.js, который поставляется по умолчанию с рельсами.

Добавьте строку включения javascript, чтобы включить его.

  <%= javascript_include_tag "rails" %>

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

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

person Sean Ahrens    schedule 20.12.2010
comment
@felix, эй, если ты думаешь, что этот ответ был потрясающим, думаешь, ты мог бы связать его с принятым ответом? =) спсхххх - person Sean Ahrens; 06.01.2015

Убедитесь, что эти строки отображаются в application.js :

 //= require jquery
 //= require jquery_ujs
person Matoeil    schedule 03.08.2012

Убедитесь, что у вас включен java-скрипт. В противном случае :method => :delete действует так же, как показано в Rails.

person klew    schedule 12.12.2010
comment
затем вы должны убедиться, что у вас загружен rail.js и на странице нет ошибок javascript. - person iain; 12.12.2010
comment
@Felix: если ты не видишь, ты уверен? когда вы переходите по этой ссылке, значит что-то с js не так. - person klew; 12.12.2010

Если вы используете неактивную маршрутизацию для блогов, должно работать следующее:

<%= link_to "Delete", @blog, :method => :delete, :confirm => "Are you sure ?"%>
person clemensp    schedule 12.12.2010

Вы можете попробовать использовать «метод данных» вместо: метод.

<%=link_to "Delete",blog_path(@blog.id), 'data-method' => :delete, :class => "delete", :confirm => "Are you sure ?"%> 

Вы можете проверить на jquery_ujs.js следующий фрагмент кода:

// Handles "data-method" on links such as:
// <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
person rorra    schedule 05.09.2011

Чтобы link_to работал с методом delete, Rails необходим ненавязчивый адаптер сценариев для jQuery.

  • Убедитесь, что ваш Gemfile имеет

    gem 'jquery-rails'

  • Убедитесь, что app/assets/javascripts/application.js имеет

    //= require jquery
    //= require jquery_ujs

  • Убедитесь, что ваше приложение/views/layouts/application.html.erb имеет

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

    внутри тега head. Удалите раздел 'data-turbolinks-track' => true, если вы не планируете использовать Turbolinks.

person Mihai Dinculescu    schedule 08.02.2016

вы должны использовать

<%=button_to "Delete",blog_path(@blog.id), :method => :delete, :class => "delete", :confirm => "Are you sure ?"%>  
person thiagoh    schedule 24.11.2012

Можно иметь рабочий link_to без jQuery

Я нашел лучший процесс для создания работающей ссылки на удаление для ruby ​​on rails без jQuery! Здесь я уже отвечаю: https://stackoverflow.com/a/67710994/14387700

Но чтобы упростить задачу, я снова пишу это здесь.

Нам нужно работать с 3 вещами:

  1. Добавление метода уничтожения в articles_controller.rb
  2. Настройка routes.rb
  3. Тег LINK_TO

Давайте начнем...

Добавление метода уничтожения в article_controller.rb

Сначала мы добавим def destroy ... end в articles_controller.rb, давайте откроем:

# app/controllers/articles_controller.rb

  def destroy
    @article = Article.find(params[:id])
    @article.destroy
    params[:id] = nil
    flash[:notice] = "Art has been deleted"
    redirect_to :action => :index
  end

Здесь

  1. в первой строке мы вызываем переменную '@article', которая найдет и выберет параметры ID статьи в консоли rails из нашей базы данных. Потом,
  2. во 2-й строке переменная @article сделает команду уничтожения в консоли. тогда,
  3. в 3-й строке: параметры id будут удалены и
  4. в 4-й строке на странице приложения будет мигать уведомление. Искусство было удалено, а также будет отображаться в консоли, что в базе данных ничего не найдено.
  5. В 5-й строке, после завершения процесса уничтожения, мы будем перенаправлены на страницу индекса статьи.

Это главный фактор, который даст разрушительную команду. и заставьте link_to работать.

Настройка маршрутов.rb

НО ПОДОЖДИТЕ Нам нужны 2 маршрута для страницы уничтожения:

  1. Настройка протокола GET
  2. Настройка протокола DELETE

В маршрутах просто добавьте:

  resources :articles, except: [:destroy] # this will add all get request links automatically except destroy link

  post '/articles/new' => 'articles#create'
  post '/articles/:id' => 'articles#update'
  post '/articles/:id/edit' => 'articles#update' # this 3 lines are needed for other forms purpose

  # we need this 2 lines for our delete link_to setup
  delete 'articles/:id/delete' => 'articles#destroy', as: 'articles_delete'
  get '/articles/:id/delete' => 'articles#destroy'
  

Здесь

  1. 2-я последняя строка объявляет метод DELETE,

    • 'articles/:id/delete' will be the link structure in post link tag (known as: anchor tag in HTML) for every single post,
    • '=›' указывает структуру ссылки на тег контроллера, которым является 'articles#destroy',
    • затем мы определили текст пути, установив ** как: 'articles_delete'**, который мы будем использовать как: 'articles_delete_path' или 'articles_delete_url' в теге link_to.

потом

  1. в последней строке мы определили запрос на получение ссылки на удаление, которая даст нам рабочую ссылку, такую ​​​​как https://2haas.com/articles/1/delete, за исключением /articles/1/destroy, что означает, что мы можем настроить нашу ссылку на удаление из эти 2 метода настройки с дополнительной информацией.

Последний самый приятный результат удаления

Желаемый тег link_to

мы можем использовать это, чтобы получить правильный тег удаления link_to, который будет работать.

<%= link_to 'Delete Article', articles_delete_path, method: :delete %>
<%= link_to 'Delete Article', articles_delete_url, method: :delete %>

<% obj.each do |post| %>
<%= link_to 'Delete Article', articles_delete_path(post), method: :delete %>
<% end %>

И это сделано, кроме jQuery

Спасибо за правильное прочтение этого ответа!

УДАЧНЫХ ПРОГРАММ

person Abrar Jahin    schedule 27.05.2021