Rails 3.1 link_to не показывает подтверждение или уничтожает должным образом - PullRequest
4 голосов
/ 04 января 2012

Я пробирался через главы на railstutorial.org и использовал Rails 3.1.3, потому что я сумасшедший и / или хотел испытать. Мне удалось выяснить большинство проблем с версиями, но эта на некоторое время поставила меня в тупик.

В 10.4.2 Майкл Хартл использует следующий код для удаления пользователей:

<%= link_to "delete", user, :method => :delete, :confirm => "You sure?", 
                            :title => "Delete #{user.name}" %>

Он не работает должным образом, если вы тестируете его в браузере (chrome), и вместо этого отправляет вас на эту страницу пользователя.

Он должен работать, если вы включите это:

<%= javascript_include_tag :defaults %>

но он не работает с Rails 3.1 (хотя он должен работать и для Rails 3.0, или, как я слышал).

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Итак, для всех вас, кто хочет вырвать свои волосы для использования Rails 3.1, вот решение.

<%= javascript_include_tag "application" %>

Использование «application» вместо: «defaults» решает эту проблему, удаляет и подтверждает, что должно работатьвернуться к кодированию!

Особая благодарность Джорджу Шоу за этот ответ на https://stackoverflow.com/a/8350158/1127011.

И если вам интересно, название для наведения мышитолько.

0 голосов
/ 04 января 2012

HTML-тег всегда будет запускать метод GET.Rails использует драйвер Javascript для замены глагола HTTP.Метод link_to отменит любой метод (post, put и delete) для получения (соответствующий действию show), когда:

  • Javascript был отключен пользователем
  • по некоторым причинамНенавязчивый драйвер Rails для JavaScript не обрабатывает ссылку должным образом

См. http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html

Я подозреваю, что вторая причина связана с проблемой.Убедитесь, что включены файлы jquery.js, application.js, jquery_ujs.js.

Вместо link_to вы можете попытаться использовать button_to, которая создает форму, разрешающую методы put, post и delete без включенного Javascript.

...