#html #ruby-on-rails #ruby #erb
#HTML #ruby-on-rails #ruby #ошибка
Вопрос:
Я относительно новичок в программировании и просто задаюсь вопросом, есть ли способ создать что-то подобное = link_to "sign out", destroy_user_session_path, method: :delete
, но с использованием <a>
ссылки.
Редактировать
Позвольте мне уточнить, я использовал = link_to "sign out", destroy_user_session_path, method: :delete
в своем коде (я использую haml), но он все еще выполняет запрос get. Это в выпадающем меню, и оно работает нормально, если размещено на реальной странице. Есть ли какая-либо причина для этого, или rails просто глупый?
Ответ №1:
link_to
создаст <a>
элемент. Это всего лишь вспомогательный метод Rails, который создает <a>
элементы, но с дополнительными преимуществами, заключающимися в возможности легко использовать такие вещи, как помощники Rails route, и добавлять дополнительные параметры поведения (например, глаголы, не являющиеся GET). Обычно нажатие на <a>
элемент приводит к тому, что браузер выполняет GET-запрос, но удаление не является идемпотентным, поэтому его никогда не следует выполнять с помощью GET-запроса.
link_to
Помощник Rails помогает вам обойти это, позволяя вам указать method: :delete
, который подключает дополнительные обработчики щелчков Javascript для элемента, что заставит его выполнять POST через Javascript, а не просто позволяет браузеру отправлять запрос GET при нажатии на ссылку. Он по-прежнему является <a>
элементом и может быть оформлен и представлен как таковой, но при нажатии на него выполняется запись формы с использованием глагола DELETE, а не выполнение простого запроса GET.
Комментарии:
1. Недавно я попытался использовать
link_to
и почему-то у меня это не сработало, поэтому я использовалbutton_to
Ответ №2:
<%= link_to(‘sign out’, destroy_user_session_path, метод: :delete) %>
если вы сгенерировали devise controller, пожалуйста, сделайте это следующим образом :
rails d devise:controllers users
вместо:
rails d devise:controllers user
Ответ №3:
Вот вспомогательные методы rails по умолчанию для создания ссылок, пожалуйста, обратитесь к ссылке ниже. вы получите хорошее представление о link_to
https://api.rubyonrails.org/v5.2.3/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to