it-swarm.com.ru

Как добавить подтверждающее сообщение с помощью link_to Ruby на rails

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

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

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

53
Tini

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

//= require jquery_ujs

Убедитесь, что вы включили application.js в макет:

= javascript_include_tag :application

Пока в режиме разработки просмотрите исходный HTML-код и убедитесь, что jquery_ujs.js существует.

Запустите ваш сервер и убедитесь, что ваш тег ссылки имеет значение data-verify, например:

<a href="/articles/1" data-confirm="Are you sure?" data-method="delete">

Если все эти шаги верны, все должно работать!

Примечание: проверьте этот RailsCast http://railscasts.com/episodes/136-jquery-ajax-revised

41
dpaluy

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

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

EDIT: выше не рекомендуется. Rails 4.0 теперь принимает приглашение в качестве атрибута данных. Смотрите документ здесь (Спасибо @Ricky).

link_to 'Reset', message_path(@message), :data => {:confirm => 'Are you sure?'}
125
James

Не могу вспомнить, как это было сделано в Rails 3, но в Rails 4 вы можете просто:

<%= link_to 'Reset message', { controller: 'your_controller', action: 'reset' }, data: {confirm: 'Are you sure?'} %>
10
Lukasz Muzyka

Попробуй это:

= 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

3
rubyprince
<%= 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 . Поздняя часть кодов добавляет сообщение с подтверждением.

1
Ankit Wadhwana

Почему-то не работает этот код только браузер Safari, поэтому я был задействован кнопкой ... 

<%= button_to('', delete_path(), method: "delete", data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
0
Ryosuke Hujisawa

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

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

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

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

0
Sachin Singh

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

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

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

Таким образом, вы должны иметь 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?'}

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

0
V K Singh