Rails 4 link_to Destroy не работает в учебном руководстве по началу работы

Я работаю над учебником 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:

             

На маршрутах.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 и выше вам нужно использовать button_to вместо link_to

Я решил проблему, просто добавив в активы / javascripts / application.js

 //= require jquery_ujs 

Started GET "/posts/4" for 127.0.0.1 at 2013-08-09 13:45:20 -0600

Это проблема. Ссылка delete использует GET http verb, даже если вы использовали method: delete в вашей ссылке.

Проверьте следующий stream SO

Убедитесь, что у вас есть метод удаления 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, но будет отображаться. Это говорит мне, что это плохая ссылка? Это еще не доходит до метода уничтожения. Спасибо всем за ваши ответы. Мы должны попробовать все, не так ли? Попытка

 <%= link_to 'Destroy', { action: :destroy, id: post.id }, method: :delete, data: { confirm: 'Are you sure?' } %> 

не будет работать для этого.

Вот что он имеет

 <%= link_to 'Destroy', [comment.post, comment], :confirm => 'Are you sure?', :method => :delete %> 

потому что вы хотите удалить комментарий здесь.

Но объединение вещей до сих пор, как и следующее, не дает ошибок, но у меня по-прежнему нет привязки к методу destroy в controllerе.

 <%= link_to 'Destroy', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' } %> 

и я никогда не получаю подтверждение, как вы ожидали.

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

У меня была такая же проблема, и я понял, что создал приложение для rails с -J что совпадает с --skip-javascript . Для этого вам необходим JavaScript. отсутствие всплывающего windows для подтверждения удаления является мертвой поддачей.

включить ниже строку в js

 //= require jquery_ujs 

включить gem:

 gem 'jquery-rails' 

Уничтожить ссылку:

 <%= link_to "Logout", destroy_user_session_path %> 

У меня была именно эта проблема, и это было вызвано тройным щелчком по блоку кода руководства и копированием / вставкой кода прямо в мой редактор (ST2 на OSX).

Вы должны проверить, что сгенерированный HTML для ссылки выглядит следующим образом:

 Destroy Comment 

Если это не так, но вместо этого выглядит как ниже, то Javascript не будет применяться:

 Destroy Comment 

Большие промежутки между href и unparsed Ruby вызваны неразрывными пробелами (символом \u00a0 ), используемым в Руководстве, копируемом в ваш скрипт.

Я не уверен, почему это не вызывает ошибку синтаксического анализа.

У меня была такая же проблема, как у Барри. Убедитесь, что вы правильно скопировали / вставляете файл /app/views/index.html.erb и проверяете отображаемый html.

У меня была такая же проблема. В моем случае у ai был файл \ app \ views \ layouts \ application.html.erb \ app \ views \ layouts \

 <%= 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 ответ (о кофейничном камне в windowsх).

У меня та же проблема. Я работаю так:

Мой env. это: A. ruby ​​2.2.4p230 (2015-12-16 версия 53155) [x64-mingw32] B. Rails 4.2.5 C. Браузер: Firfox 44.02

  1. add include js в html-странице, потому что функция delete будет использовать js для обработки. <%= javascript_include_tag "application" %>

  2. Добавить skip_before_action :verify_authenticity_token для controllerа для предотвращения InvalidAuthenticityToken в AdsController # destroy

  3. add link_to на вашу веб-страницу <%= link_to 'Delete', post, method: :delete, data: {confirm: "Are you sure?"}%>

    Теперь я могу использовать link_to для удаления записи с моей страницы.

Interesting Posts
Давайте будем гением компьютера.