Подтвердить что ты не робот

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:

<% @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
4b9b3361

Ответ 1

Попробуйте это

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

Ответ 2

Убедитесь, что gem 'jquery-rails' находится в gemfile, а jquery_ujs включен в файл app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs

Источник: https://github.com/rails/jquery-ujs

Ответ 3

У меня была та же проблема, для рельсов 4.2.X. Проверял все мои файлы javascript, но не смог заставить его работать. если вы посмотрите внимательно на запрос сервера, u будет отсутствовать "authenticity_token" в параметрах, поэтому пользователь выйдет из системы. В rails 4.1 и выше u необходимо использовать button_to вместо link_to

Ответ 4

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

//= require jquery_ujs

Ответ 5

Убедитесь, что у вас есть метод удаления 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.

Ответ 6

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

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

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

Ответ 7

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

//= require jquery_ujs

включить gem:

gem 'jquery-rails'

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

<%= link_to "Logout", destroy_user_session_path %>

Ответ 8

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

Ответ 9

У меня была именно эта проблема, и это было вызвано тройным щелчком по блоку кода руководства и копированием/вставкой кода прямо в мой редактор (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=&gt;&quot;Are you sure?&quot;}"                method="delete">Destroy Comment</a>

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

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

Ответ 10

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

Ответ 11

У меня была такая же проблема. В моем случае у меня был файл \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 в окнах).

Ответ 12

У меня такая же проблема. Я работаю следующим образом:

Моя 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 для удаления записи с моей страницы.

Ответ 13

Убедитесь, что вы удалите этот //= в assets/javascripts/application.js, например, измените

//=require turbolinks

к

require turbolinks

Это помогло мне.

Ответ 14

Использование метода button_to вместо link_to, по-видимому, сработало, за исключением того факта, что это не было подтверждением (что я считал важным).

В моем случае я использовал реактив-рельсы и имел несколько макетов.

Добавление <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> в мой макет hello-world решило проблему.