2010-09-23 2 views
38

Я использую Rails 3 и имею страницу, которая выводит список сообщений из базы данных. Я хочу удалить сообщение из ссылки.Удалить ссылку отправляет «Get» вместо «Delete» в Rails 3 view

Второй пример ниже работает, но первый - нет. Кто-нибудь знает, почему первый не будет работать? Мой взгляд содержит:

# this link sends a "GET" request which asks for the #show function 
<%= link_to 'Delete', post, :method => :delete %> 

# this link sends the proper "DELETE" request which asks for the #destroy function 
<%= button_to 'Delete', post, :method => :delete %> 

Мои маршруты файл содержит следующее:

resources :posts 

ответ

48

Убедитесь, что ваш <head> раздел в макете включает в себя следующее:

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

В Rails 3, запросы удаления обрабатываются с помощью JavaScript, чтобы гарантировать, что запрос отправляется правильно. Если у вас нет мета-тегов csrf и требуемого кода JavaScript, удалите ссылки не будут работать. Файлы JavaScript :defaults включают, среди прочего, prototype.js и application.js. Последний содержит материал, который заставляет работать ссылку, но полагается на структуру Prototype.

Если вы не хотите использовать библиотеки JavaScript прототипа по умолчанию, есть порты application.js для нескольких других фреймворков. Например, вы можете найти jQuery один here.

Кнопки будут работать независимо от JavaScript, так как код HTML, созданный с помощью button_to, содержит всю необходимую информацию. Вот почему вы видите, что кнопка работает, а ссылка отсутствует.

+0

Великого ответ. Спасибо. –

+0

Это очень помогло мне. – Rupert

+0

спасибо - не могли бы вы разместить ссылку для получения подробной информации об этой функции рельсов 3? – gorn

3

В моем случае я использовал следующее.

<%= javascript_include_tag :defaults %> 
<%= csrf_meta_tag %> 

Я также использовал jQuery, включив jQuery чуть ниже стандартного прототипа JS. Это вызывало какой-то конфликт.

2

деструктивные действия должны быть выполнены в форме представления - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

Вы можете стилизовать кнопку соответствующим образом для удаления метода или использования формы.

17

выглядит как

<%= javascript_include_tag :defaults %> 

больше не поддерживается

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/JavascriptTagHelpers/javascript_include_tag

Вместо этого, вы должны использовать

<%= javascript_include_tag 'application' %> 
+0

Это верно для Rails 4.0.3. Я попытался применить принятый ответ, и он не сработал, пока я не сделал замену, которую вы указали здесь. –

+0

спас мой бекон! – brntsllvn

+0

Это должен быть принятый ответ! Благодаря! –

0

Это будет работать. Проблема в том, что вам нужно передать ему правильный путь, чтобы маршрут получил его.

<%= link_to 'Delete', post_path(post.id), :method => :delete %> 
-1

Попробуйте это .. его простое изменение ..

добавить это к вашему маршруту.гь файл

прибудет '/ списки /: list_id/комментарии /: идентификатор' => 'комментарии # уничтожить'

Я сделал это изменение, и теперь его рабочим ..

+2

Никогда не рекомендуется создавать запросы GET для длительных изменений – Vincent

Смежные вопросы