Как добавить сообщение подтверждения со ссылкой на Ruby on rails

Я хотел добавить сообщение подтверждения на функцию link_to с Ruby.

= link_to 'Reset message', :action=>'reset' ,:confirm=>'Are you sure?'

есть идеи, почему он не работает?

7 ответов


во-первых, вы должны убедиться, что ваш макет есть jquery_ujs. Лучшая практика, чтобы сделать это, включив его в свой основной приложение.js:

//= require jquery_ujs

проверьте, что вы включили приложение.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


Я могу ошибаться, но вы не указываете контроллер вместе с . Вы пробовали следующее? Если у вас есть messages ресурс, настроенный в вашем маршруте:

link_to 'Reset', message_path(@message), :confirm => 'Are you sure?'

редактировать: выше не рекомендуется. Rails 4.0 теперь принимает приглашение в качестве атрибута данных. Смотрите doc здесь (Спасибо @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, если последний параметр в вызове функции является хэшем, вам не нужно обертывать его в {} символы (другими словами, вы можете опустить это в случае, если хэш является последним параметром), поэтому код, который вы предоставили, будет интерпретироваться как вызов функции только с 2 параметрами,'Reset message' строку и {:action=>'reset', :confirm=>'Are you sure?'} хэш и :confirm=>'Are you sure?' будет интерпретироваться как url_option вместо html_option


посмотрите на свой javascript_include_tag, и он должен работать нормально:

<%= link_to("Reset message", :method => :reset, :class => 'action', :confirm => 'Are you sure?') %>

смотрите это видео railscasts для лучшего понимания.

http://railscasts.com/episodes/205-unobtrusive-javascript

документация rails для помощника link_to.

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to


во-первых, нам нужно понять, что пакет Js отвечает на такого рода оповещения в приложении rails. Поэтому для этого пакет jquery_ujs предназначен для отображения предупреждений в rails.

таким образом, вы должны иметь jquery & jquery_ujs в своем приложении.файл js.

//= require jquery
//= require jquery_ujs

теперь нам нужно подтвердить, что приложение.файл js включен в требуемый макет или нет. По умолчанию файл макета остается в приложении.формат html.erb в папке макета просмотр.

<%= javascript_include_tag 'application' %>

далее ссылка должна иметь атрибуты data-confirm & 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?'}

это должно работать, если все выровнено таким же образом.