Ответ 1
Попробуйте это
<%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %>
Я работаю над учебником Getting Started (создание блога), а link_to Destroy работает неправильно. В терминале он всегда интерпретирует его как #SHOW.
При чтении подобных проблем я узнал, что Delete должен быть преобразован в POST для браузера, чтобы его интерпретировать. Кажется, это не происходит.
Я столкнулся с той же проблемой, используя Destroy в курсе Lynda.com Rails, так что это заставляет меня думать, что это что-то в моей среде разработки. Я использую Rails 4, Ruby 2.00p274, MySQL, WEBrick для HTTP-сервера на MacBook Pro Lion.
в сеансе терминала при выборе Destroy:
Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600
Processing by PostsController#show as HTML
Parameters: {"id"=>"4"}
Post Load (0.6ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT 1 [["id", "4"]]
Rendered posts/show.html.erb within layouts/application (0.4ms)
Completed 200 OK in 13ms (Views: 8.6ms | ActiveRecord: 0.6ms)
В ports-controller.rb:
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to action: :index
end
В index.html.erb:
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.text %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', { action: :destroy, id: post.id }, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
В маршрутах .rb
Blog::Application.routes.draw do
resources :posts do
resources :comments
end
root to: 'welcome#index'
end
Попробуйте это
<%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %>
Убедитесь, что gem 'jquery-rails' находится в gemfile, а jquery_ujs включен в файл app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
Источник: https://github.com/rails/jquery-ujs
У меня была та же проблема, для рельсов 4.2.X. Проверял все мои файлы javascript, но не смог заставить его работать. если вы посмотрите внимательно на запрос сервера, u будет отсутствовать "authenticity_token" в параметрах, поэтому пользователь выйдет из системы. В rails 4.1 и выше u необходимо использовать button_to вместо link_to
Я решил проблему, просто добавив в активы /javascripts/application.js
//= require jquery_ujs
Убедитесь, что у вас есть метод удаления REST с помощью маршрутов рейка.
DELETE /articles/:id(.:format) articles#destroy
У меня такая же проблема только с этой версией блога, как и у меня. http://blog.8thcolor.com/en/2011/08/nested-resources-with-independent-views-in-ruby-on-rails/
Я также пытаюсь узнать, как использовать веб-консоль и подглядывать внутри нее. Моя проблема в том, что bind.pry не отображается в методе destroy, но будет отображаться. Это говорит мне, что это плохая ссылка? Это не доходит до метода уничтожения. Спасибо всем за ваши ответы. Мы должны попробовать все, не так ли? Попытка
<td><%= link_to 'Destroy', { action: :destroy, id: post.id }, method: :delete, data: { confirm: 'Are you sure?' } %></td>
не будет работать для этого.
Здесь он имеет
<td><%= link_to 'Destroy', [comment.post, comment], :confirm => 'Are you sure?', :method => :delete %></td>
потому что вы хотите удалить комментарий здесь.
Но объединение вещей до сих пор, как и в следующем, не дает ошибок, но у меня по-прежнему нет bind.pry из метода destroy в контроллере.
<td><%= link_to 'Destroy', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' } %></td>
и я никогда не получаю подтверждение, как вы ожидали.
Так что попытайтесь выяснить, что происходит с jquery как подозреваемый. Я могу подтвердить, что это было мое дело, но в остальном я уйду на нубро, потому что это будет отображаться в поиске Google.
Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600
Это проблема. Ссылка delete использует GET http verb, даже если вы использовали method: delete
в своей ссылке.
включить строку ниже в js
//= require jquery_ujs
включить gem:
gem 'jquery-rails'
Уничтожить ссылку:
<%= link_to "Logout", destroy_user_session_path %>
У меня была такая же проблема, и я понял, что создал приложение rails с -J
, которое совпадает с --skip-javascript
.
Для этого вам необходим JavaScript. отсутствие всплывающего окна для подтверждения удаления является мертвой поддачей.
У меня была именно эта проблема, и это было вызвано тройным щелчком по блоку кода руководства и копированием/вставкой кода прямо в мой редактор (ST2 на OSX).
Вы должны проверить, что сгенерированный HTML для ссылки выглядит следующим образом:
<a data-confirm="Are you sure?" data-method="delete" href="/posts/3/comments/3" rel="nofollow">Destroy Comment</a>
Если это не так, но вместо этого выглядит как ниже, то Javascript не будет применяться:
<a href="/posts/3/comments/3" data="{:confirm=>"Are you sure?"}" method="delete">Destroy Comment</a>
Большие промежутки между href
и unparsed Ruby вызваны неразрывными пробелами (символ Юникода \u00a0
), используемые в Руководстве, копируются в ваш script.
Я не уверен, почему это не вызывает ошибку анализа script.
У меня была такая же проблема, как у Барри. Убедитесь, что вы правильно копируете/вставляете файл /app/views/index.html.erb и проверяете отображаемый html.
У меня была такая же проблема. В моем случае у меня был файл \app\views\layouts\application.html.erb\app\views\layouts\application.html.erb из
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
к
<%= stylesheet_link_tag 'default', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'default', 'data-turbolinks-track' => true %>
чтобы избежать моей первой проблемы с Rails. Но это явно исказило выполнение JavaScript и вызвало проблему Destroy. Поэтому откат вашего \app\views\layouts\application.html.erb файла в исходное состояние и рассматривайте эту проблему как здесь.
Rails ExecJS:: ProgramError в Pages # home?
в ответе evedovelli (о драгоценности gff в окнах).
У меня такая же проблема. Я работаю следующим образом:
Моя env. является: A. ruby 2.2.4p230 (версия 2015-12-16 53155) [x64-mingw32] B. Rails 4.2.5 C. Браузер: Firfox 44.02
add включить js в html-страницу, потому что функция delete будет использовать js для обработки.
<%= javascript_include_tag "application" %>
добавить skip_before_action :verify_authenticity_token
в контроллер для предотвращения InvalidAuthenticityToken в AdsController # destroy
добавить ссылку на веб-страницу
<%= link_to 'Delete', post, method: :delete, data: {confirm: "Are you sure?"}%>
Теперь я могу использовать link_to для удаления записи с моей страницы.
Убедитесь, что вы удалите этот //=
в assets/javascripts/application.js
, например, измените
//=require turbolinks
к
require turbolinks
Это помогло мне.
Использование метода button_to
вместо link_to
, по-видимому, сработало, за исключением того факта, что это не было подтверждением (что я считал важным).
В моем случае я использовал реактив-рельсы и имел несколько макетов.
Добавление <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
в мой макет hello-world решило проблему.