Я хотел добавить сообщение подтверждения в функцию link_to с Ruby.
= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'
Любые идеи, почему это не работает?
Я хотел добавить сообщение подтверждения в функцию link_to с Ruby.
= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'
Любые идеи, почему это не работает?
Сначала вы должны убедиться, что ваш макет имеет jquery_ujs. Лучше всего это сделать, включив его в основное приложение application.js:
//= require jquery_ujs
Убедитесь, что вы включили application.js в свой макет:
= javascript_include_tag :application
Пока в режиме разработки просмотрите исходный HTML-код и проверьте jquery_ujs.js.
Запустите сервер и убедитесь, что ваш тег ссылки имеет подтверждение данных, например:
<a href="/articles/1" data-confirm="Are you sure?" data-method="delete">
Если все эти шаги верны, все должно работать!
Примечание: проверьте этот RailsCast http://railscasts.com/episodes/136-jquery-ajax-revised
Возможно, я ошибаюсь, но вы не укажете контроллер вместе с опцией :action
. Вы пробовали следующее? Предполагая, что у вас есть ресурс messages
, настроенный на вашем маршруте:
link_to 'Reset', message_path(@message), :confirm => 'Are you sure?'
РЕДАКТИРОВАТЬ. Выше не рекомендуется. Rails 4.0 теперь принимает приглашение как атрибут данных. См. Документ здесь (Спасибо @Ricky).
link_to 'Reset', message_path(@message), :data => {:confirm => 'Are you sure?'}
Не помню, как это было сделано в Rails 3, но в Rails 4 вы можете просто:
<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>
Попробуйте следующее:
= link_to 'Reset message', {:action=>'reset'}, :confirm=>'Are you sure?'
или для более четкого
= link_to('Reset message', {:action=>'reset'}, {:confirm=>'Are you sure?'})
Обратитесь http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
Вы увидите, что есть 3 параметра, когда вы указываете url как опции, такие как {:action => ..., :controller => ...}
link_to(body, url_options = {}, html_options = {})
В ruby, если последний параметр в вызове функции является хешем, вам не нужно обертывать его символами {}
(другими словами, вы можете опустить это в случае, если хэш является последним параметром), поэтому код, который вы предоставили, будет интерпретироваться как вызов функции только с двумя параметрами, 'Reset message'
string и {:action=>'reset', :confirm=>'Are you sure?'}
хешем, а :confirm=>'Are you sure?'
будет интерпретироваться как url_option
вместо html_option
<%= link_to "Delete this article", article_path(article), method: :delete,
data: { confirm: "Are you sure you want to delete the
article?"}, class: "btn btn-xs btn-danger" %>
Ссылка на кнопку, где article_path
является префиксом, а (article)
передает id
который требуется для method: :delete
метод method: :delete
. Поздняя часть кодов добавляет сообщение с подтверждением.
Посмотрите на свой javascript_include_tag, и он должен работать нормально:
<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>
смотреть видео с railscasts для лучшего понимания.
http://railscasts.com/episodes/205-unobtrusive-javascript
рельсы документации для link_to helper.
http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
Во-первых, нам нужно понять, какой пакет Js реагирует на такого рода оповещения в приложении rails. Таким образом, пакет jquery_ujs отвечает за отображение предупреждений в рельсах.
Таким образом, вы должны иметь jquery & jquery_ujs в вашем файле application.js.
//= require jquery
//= require jquery_ujs
Теперь нам нужно подтвердить, что файл application.js включен в требуемый макет или нет. По умолчанию файл макета остается в application.html.erb в папке макетов представлений.
<%= javascript_include_tag 'application' %>
Затем ссылка должна иметь атрибуты data-verify & data-method как
<a href="/message/1/reset" data-method="delete" data-confirm="Are you sure?">
В erb это можно записать как
= link_to 'Reset', message_path(@message), data: {method: 'delete', confirm: 'Are you sure?'}
Это должно работать, если все выровнено таким же образом.
Почему-то не работает этот код только браузер Safari, поэтому я был задействован кнопкой...
<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
<%= link_to 'Reset Message', data: {confirm:"Are you sure?"} %>
не забудьте добавить путь между "сбросить сообщение" и данные