Почему для создания ссылки уничтожения в рельсах требуются файлы JavaScript по умолчанию? - PullRequest
6 голосов
/ 29 января 2011

Я хотел создать базовую ссылку «уничтожить» в Rails сегодня, поэтому я написал это:

 <%= link_to "destroy me", @company, :method=>:delete
 %>

Сгенерированный код был:

<a href="/companies/1"
data-method="delete"
rel="nofollow">destroy me</a>

В моих маршрутахобычный

resources :companies

И мое действие уничтожения было в моем контроллере.

Но всякий раз, когда я нажимал на ссылку, меня перенаправляли на действие show.Странно.

Оказалось, я не включил в свой макет следующую строку:

<%= javascript_include_tag :defaults %>

После включения ссылка на уничтожение сработала!

Почему?Зачем мне нужно включать теги javascript по умолчанию, чтобы это работало?

И, поскольку я не хочу использовать прототип, как мне включать только те файлы, которые мне нужны?

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011

Начиная с версии 3.0, помощники по Rails генерируют чистые HTML-теги с атрибутами данных HTML5 (data-method в вашем примере).Для поддержки этих атрибутов данных для прототипа необходим rails.js.Если вы используете jQuery, то необходима версия jQuery (https://github.com/rails/jquery-ujs).

Проще говоря, rails.js вместе со структурой javascript (prototype или jquery) выполняет некоторую магию, чтобы перехватить щелчок и другие события в теге.в противном случае, когда вы нажимаете на ссылку, происходит нормальное нажатие, потому что без JavaScript ссылка является обычной ссылкой.

2 голосов
/ 29 января 2011

Это из-за ограничений html и того факта, что теги привязки не могут отправлять запросы любым другим способом, кроме GET.

Если вы посмотрите на rails.js (который будет включен в :defaults), когда вы щелкаете ссылку, которая имеет «метод данных», он генерирует и отправляет форму, которая использует правильный http-метод для отправки в URL, указанный в теге привязки.

Это обходной путь, но на самом деле нет другого способа заставить обычные теги привязки отправлять запросы DELETE (или любой другой HTTP-глагол, кроме GET).

Если вы не хотите использовать js, используйте форму (возможно, используя button_to вместо link_to), чтобы сделать запрос. Если вы создадите свой собственный помощник для создания формы, вы можете сделать так, чтобы он использовал тег кнопки (в отличие от ввода, который строит рельсы), который довольно легко сделать, чтобы он выглядел как обычная ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...