Синтаксис link_to с Rails3 (link_to_remote) и базовым JavaScript не работает в приложении Rails3?
-
20-09-2019 - |
Вопрос
Мне интересно, полностью ли нарушен базовый синтаксис link_to в текущем мастере Rails3 или я делаю здесь какой-то неправильный синтаксис.
= link_to "name", nil, :onlick => "alert('Hello world!');"
на самом деле должно выдавать предупреждение при нажатии.очень просто.не работает в моем проекте Rails3!(также нет вывода ошибок!) есть идеи?
для общего синтаксиса link_to я не смог найти пример, где я мог бы объединить link_to_remote с классом подтверждения, удаленным доступом и html (см. мою попытку ниже)
= link_to "delete", {:action => "destroy", :remote => true, :method => :delete, :confirm => "#{a.title} wirklich Löschen?" }, :class => "trash"
даже Rails3 API мне здесь не помогает: http://rails3api.s3.amazonaws.com/index.html
помощь!
Решение 2
ОК, похоже, новые ненавязчивые изменения в JavaScript создали проблему.дополнительную информацию см. в следующем сообщении, если у вас возникнут подобные проблемы.http://blog.loopedstrange.com/modest-rubyist-archive/rails-3-ujs-and-csrf-meta-tags
<%= csrf_meta_tag %>
исправленные вещи для меня.
Другие советы
Я считаю, что ваша проблема в том, что вы настроили ссылку так, чтобы предупреждение отображалось при ее лизании, а не при щелчке по ней.;)
Что касается link_to_remote
, оно изменилось с переходом на ненавязчивый JavaScript.Вы можете прочитать об этом здесь: http://blog.solnic.eu/2009/09/08/unobtrusive-javascript-helpers-in-rails-3.html
ноль не работает:
= link_to "name", nil, :onclick => "alert('Hello world!');"
=> <a href="/currentpath", onclick="alert('Hello world!');">name</a>
Вам следует использовать:
= link_to "name", "#", :onclick => "alert('Hello world!');"
=> <a href="#", onclick="alert('Hello world!');">name</a>
Если ни один из других ответов здесь не подходит вам, возможно, это поможет.
Так что объявления csrf_meta_tag мне было недостаточно, хотя его все равно следует добавить в файл макета для Rails 3.У меня это оказался конфликт с jQuery.Я просто положил это:
<script type="text/javascript">
jQuery.noConflict();
</script>
после того, как тег Rails scripts в моем макете и конфликт между Prototype и jQuery были разрешены.Эй, вуаля, я получил диалоговое окно подтверждения при удалении.
Этот метод также решил мою первоначальную проблему при использовании link_to для удаления записи.При использовании link_to любая команда уничтожения перенаправляла на страницу показа записи.Поэтому я перешел на button_to на основе другого решения, которое видел, но без подтверждения.Интересно, есть ли какие-то более глубокие проблемы с jQuery и Prototype?
Все это произошло в обновленном приложении Rails 2.3.5, которое, казалось, работало нормально, без необходимости включать Prototype или :defaults в мой файл макета.
Кстати, я следовал этим инструкциям:
http://webtech.union.rpi.edu/blog/2010/02/21/jquery-and-rails-3/
чтобы попытаться полностью потерять Prototype для этого проекта и вместо этого использовать подмодуль jQuery git для Rails 3.Следование этим инструкциям не сработало, и у меня все еще не было диалоговых окон подтверждения с button_to и отображения страницы при использовании link_to.Просто подумал, что упомяну об этом, чтобы избавить кого-то от необходимости пробовать это.
Комментарий не по теме к ответу выше, так как я пока не могу комментировать :(
@robeastham:Я решил оставить несколько комментариев, которые могут помочь с некоторыми проблемами, с которыми вы столкнулись.
У меня также возникла проблема «уничтожить ссылку, перенаправляющую на страницу показа вместо индексной страницы» с момента перехода с ActiveRecord на Mongoid, и я не нашел реального решения (прототип уже удален).Однако обходной путь, который работает без проблем, — это явно указать путь перенаправления, используя :location для response_with:
respond_with @themodel, :location => themodels_url
Что касается получения всплывающего окна подтверждения с кнопкой, вы можете сделать:
button_to "Button Name", { :controller => "your/controller", :action => :action_name, :confirm => "Text for the pop-up"}, { :method => :<method name> }
например
button_to "Click Here", { :controller => "home", :action -> :set_completed, :confirm => "Mark the item complete?" }, { :method => :put }
Это сработало для меня:
<%= link_to "Recommend", recommend_user_path(@user), :remote => true %>
Убедитесь, что это находится в вашем view\layout\application.html.erb (или его эквиваленте):
<%= csrf_meta_tags %>
Обратите внимание, что Rails v3.2.2 использует «теги», а не «тег».