Rails 3: метод =>: удаление не работает в Internet Explorer - PullRequest
4 голосов
/ 22 сентября 2010

Я прохожу учебное пособие по rails 3 на railstutorial.org. Я только что создал чрезвычайно простой эшафот Пользователи.

Сгенерированная скаффолдом ссылка уничтожения не работает в Internet Explorer. Он перенаправляет на действие show вместо удаления пользователя.

Эта проблема возникает только в IE9 и IE8 (единственные версии IE, которые я тестировал до сих пор). Проблема не возникает в Firefox. Может кто-нибудь сказать мне, почему это происходит?

Вид:

<%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %>

Сгенерированный HTML:

<a href="/users/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>

Контроллер:

def destroy
    @user = User.find(params[:id])
    @user.destroy

    respond_to do |format|
      format.html { redirect_to(users_url) }
      format.xml  { head :ok }
    end
end

Ответы [ 11 ]

8 голосов
/ 02 декабря 2011

В Rails 3.1 с конвейером ресурсов весь javascript находится в application.js.Таким образом, вместо: по умолчанию, вам нужно «приложение».

<%= javascript_include_tag "application" %>
2 голосов
/ 25 июля 2011

Я не смог заставить его работать с IE9 со стандартными библиотеками javascript, поэтому я установил jquery-rails , и все работает отлично.Возможно, не идеальное решение, но если оно работает ...

2 голосов
/ 01 апреля 2011

Вам нужно обновить дистрибутив прототипа до 1.7 вместо 1.7rc2 (который не имеет полной поддержки IE 9). Последняя версия Rails gem (на момент написания) (в репозитории gem входит пакет 1.7rc2. Перейдите на домашнюю страницу prototype, загрузите новую версию 1.7 и замените ее на пакет prototype.js.

2 голосов
/ 19 ноября 2010

Замените public/javascripts/rails.js вашего приложения этим:

https://github.com/rails/prototype-ujs/raw/master/src/rails.js

Это обновлено недавно (2010/11/13).

rails.js в комплекте с Rails 3.0.0 / 3.0.1 плохо работает в Internet Explorer.

2 голосов
/ 23 сентября 2010

Убедитесь, что у вас есть <% = javascript_include_tag: defaults%>

JS теперь ненавязчив в рельсах 3, поэтому для его работы требуется включение.

1 голос
/ 06 июня 2013

Вероятно, это связано с тем, что загрузка вашего скрипта (rails.js и / или application.js) происходит в голове. Во время выполнения скрипта в вашей DOM нет элементов с атрибутами data-confirm и data-method.

Итак, решение состоит в том, чтобы переместить тег javascript в конец <body>. В настоящее время DOM, скорее всего, загружен, и javascript найдет ваши элементы.

1 голос
/ 06 мая 2011

Попробуйте заменить ваш включенный в javascript файл по умолчанию на:

<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "jquery.min" %>
<%= javascript_include_tag "rails" %>

после выполнения описанных выше действий, чтобы получить последние версии jquery.js, jquery.min.js и rails.js.В любом случае, это сработало для меня.

Или замените значение: по умолчанию в application.rb:

config.action_view.javascript_expansions[:defaults] = %w(jquery jquery.min rails)

И тогда ваш макет приложения может выглядеть так:

    <%= javascript_include_tag :defaults %>
1 голос
/ 17 января 2011

По умолчанию новые проекты rails создаются с библиотеками javascript Prototype, с некоторыми специфичными для прототипа вспомогательными функциями в "public / javascript / rails.js". Строительные леса полагаются на некоторых из этих помощников для обработки некоторых вещей, таких как уничтожение записи, поскольку не существует хорошего способа выполнения запроса DELETE без использования JavaScript и т. Д.

Убедитесь, что ваши страницы загружают как библиотеки javascript, так и файл "rails.js", которые необходимы для работы скаффолдинга (см. Ответ theschmitzer или проверьте в Firebug).

Во-вторых, если вы используете jQuery, установите гем 'jquery-rails' и затем запустите "rails g jquery: install". Это удалит библиотеки Prototype, установит библиотеки jQuery и обновит помощники для использования jQuery.

0 голосов
/ 05 августа 2014

Я заметил, что в рельсах 4 link_to помещает: method в качестве html-атрибута «data-method», но: verify идет к атрибуту «verify», где javascript нужен для «data-Подтверждение».1002 *

Не уверен, что это ошибка в рельсах, но вы можете обойти ее, выполнив следующее:

<%= link_to 'Destroy', user, :data => {:confirm => 'Are you sure?'}, :method => :delete %>
0 голосов
/ 15 декабря 2010

У меня была та же проблема .Я использовал <%= javascript_include_tag :defaults %>, а также библиотеку jQuery.Когда я удалил библиотеку jQuery, все заработало.Также вы можете использовать noConflict().

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