Как Rails 3 решает, какой HTTP-глагол будет использоваться при нажатии на ссылку, сгенерированную "link_to"? - PullRequest
4 голосов
/ 15 декабря 2010

У меня есть две ссылки:

<%= link_to("Edit", edit_product_path(product.id)) %>
<%= link_to("Delete", product, :method => :delete) %>

Сгенерированные ссылки:

<a href="/products/81/edit">Edit</a>
<a href="/products/81" data-method="delete" rel="nofollow">Delete</a>

При нажатии на Edit и Delete, метод GETused.

Как Rails решил, какой метод использовать?

Что означают data-method="delete" и rel="nofollow" в ссылке Delete?

Ответы [ 3 ]

7 голосов
/ 15 декабря 2010

Браузеры обычно поддерживают методы GET и POST HTTP. Чтобы эмулировать глаголы PUT и DELETE, Rails вводит специальный параметр _method при отправке формы.

Вы указываете метод, который хотите использовать, передавая опцию :method, как и вы.

<%= link_to("Action with DELETE", path_to_something, :method => :delete) %>
<%= link_to("Action with PUT", path_to_something, :method => :put) %>

Если не указано, значением по умолчанию является GET.

Начиная с Rails 3, Rails использует ненавязчивый JavaScript для обработки метода DELETE. Он передает глагол HTTP в атрибуте data-method, который является HTML 5 функцией .

В вашем случае это не работает, потому что вы, вероятно, забыли включить библиотеку JavaScript (например, Prototype или jQuery) и адаптер Rails.

Убедитесь, что вы используете jQuery или Prototype, и вы включаете файл rails.js javascript. Также не забудьте добавить csrf_meta_tag.

<%= csrf_meta_tag %>

Если вы хотите научиться двигаться, я написал статью о ненавязчивом JavaScript в Rails 3 несколько месяцев назад.

0 голосов
/ 13 февраля 2011

Интересно.Я могу подтвердить, что link_to с опцией «: method =>: delete» работает в скаффолде по умолчанию.Однако, пытаясь построить проект без строительных лесов, я не могу заставить link_to работать.button_to работает без проблем, используя те же параметры, что и link_to.Я не мог понять, какие леса "секретного соуса" вводят в игру, чтобы заставить link_to работать.Хотя утверждение Роба о том, что link_to delete не работает в Rails 3, может не быть технически точным, я нашел его практически точным.Спасибо, Роб, я застрял на несколько часов, пока не увидел твой пост.

0 голосов
/ 15 декабря 2010

Вы не можете использовать ссылку для удаления в рельсах 3 Вам нужно использовать button_to например.

<%= button_to("Delete", product, :method => :delete) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...