Синтаксис link_to с Rails3 (link_to_remote) и базовым JavaScript не работает в приложении Rails3?

StackOverflow https://stackoverflow.com/questions/2458841

Вопрос

Мне интересно, полностью ли нарушен базовый синтаксис 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 использует «теги», а не «тег».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top