46

Chciałem dodać wiadomość potwierdzającą dla funkcji link_to z Ruby.Jak dodać potwierdzenie z linkiem do Ruby na szynach

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

Jakieś pomysły, dlaczego to nie działa?

+0

Możliwy duplikat [Railsów - Jak umieścić okienko z potwierdzeniem na f.submit?] (Http://stackoverflow.com/questions/15771582/rails-how-to-put-a-confirmation-popup-on -af-submit) –

+0

Nie wydaje się to dokładnym duplikatem nominowanego przykładu. Przykładowy pyta, jak dodać potwierdzenie do przesłania formularza; to pytanie pyta, jak dodać potwierdzenie do linku. –

Odpowiedz

37

Po pierwsze, należy sprawdzić, czy układ ma jquery_ujs. Najlepsze praktyki to zrobić poprzez włączenie go w głównych application.js:

//= require jquery_ujs 

Sprawdź, czy włączone application.js w układzie:

= javascript_include_tag :application 

natomiast w trybie rozwoju , wyświetl swój źródłowy html i sprawdź, czy istnieje jquery_ujs.js.

uruchomić serwer i zweryfikować tag łącze ma danych potwierdzenia wartość, na przykład:

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

Jeśli wszystkie te kroki są poprawne, wszystko powinno działać!

Uwaga: check to RailsCast http://railscasts.com/episodes/136-jquery-ajax-revised

3

Spróbuj tego:

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

lub być bardziej jasne

= link_to('Reset message', {:action=>'reset'}, {:confirm=>'Are you sure?'}) 

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

Przekonasz się, że istnieją 3 parametry, kiedy dajesz URL jako opcji, takich jak {:action => ..., :controller => ...}

link_to(body, url_options = {}, html_options = {}) 

W ruby, jeśli ostatnim parametrem wywołania funkcji jest hash, nie musisz go owijać w znaki {} (innymi słowy, możesz pominąć to w przypadku, jeśli skrót jest ostatnim parametrem), więc kod podałeś zostanie zinterpretowane jako wywołanie funkcji z tylko 2 parametrów, 'Reset message' ciąg i {:action=>'reset', :confirm=>'Are you sure?'} hash i :confirm=>'Are you sure?' będą interpretowane jako url_option zamiast html_option

+0

To jest nowy kod jak sugerujesz = link_to ("Zresetuj wiadomość", {: akcja => "zresetuj"}, {: confirm => "Czy jesteś pewien?"}) .... a to jest html Reset message Co to jest? "data-confirm" .... stil not opened confirm message ... Dzięki. – Tini

+0

'data- *' to [niestandardowe atrybuty danych] (http://www.w3.org/html/wg/drafts/html/master/dom.html#embedding-custom-non-visible-data-w- -data - * - atrybuty) wprowadzone w HTML5, które służą jako obszary przechowywania prywatnych danych. 'dane-potwierdź' jest używane przez szyny, aby pop-up pojawił się po kliknięciu łącza. – veidt

+0

@Tini ... czy w układzie lub na stronie zawarłeś '<% = javascript_include_tag: defaults%>'. Bez tego to nie zadziała. – rubyprince

101

może się mylę, ale nie określono kontrolera wraz z opcją :action. Czy próbowałeś następujące? Zakładając, że masz messages zasób skonfigurowany w trasie:

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

EDIT: Powyżej jest przestarzała. Railsy 4.0 akceptują teraz zapytanie jako atrybut danych. Zobacz dokument here (podziękowania @Ricky).

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

Myślę, że ten styl jest przestarzały. Według dokumentacji railsów, jest to teraz atrybut danych, tj. '..., data: {confirm: 'Czy jesteś pewien?'}' – Ricky

+0

@Ricky zdajesz sobie sprawę, że to pytanie i prawie wszystkie odpowiedzi na tej stronie zostały opublikowane w maju 21, 2013? Jest wrzesień 2014 już teraz. – veidt

+1

Tak. Wybacz mi - nie jestem w pełni zanurzona w kulturze stackoverflow! Ktoś zapytał o to, został skierowany tutaj i był zdezorientowany, dlaczego ': confirm' nie działa. '' data-confirm'' działa, ale tak naprawdę nie jest to aktualna "szyna". Innymi słowy: jaki jest najlepszy sposób na odnotowanie tego? – Ricky

0

spojrzeć na swoje javascript_include_tag i powinno działać prawidłowo:

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

Jak wskazano powyżej, ': confirm' jest teraz przestarzałe, więc musisz użyć albo' "data-confirm" => ... 'lub' data: {confirm: ...} '. – lucasarruda

10

nie pamiętam, jak to miało miejsce w Rails 3, ale w Rails 4 można po prostu:

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

Ta odpowiedź pomogła mi najbardziej; grupowanie parametrów osobno za pomocą '{' and '}' przed częścią 'data - confirm' było tym, co musiałem zrobić. –

0

Po pierwsze, musimy zrozumieć, co Pakiet Js reaguje na tego rodzaju ostrzeżenia w aplikacji rails. W związku z tym pakiet jquery_ujs jest odpowiedzialny za pokazywanie alertów w szynach. Musisz mieć jquery & jquery_ujs w swoim pliku application.js.

//= require jquery 
//= require jquery_ujs 

Teraz musimy potwierdzić, że plik application.js jest zawarty w wymaganym układzie, czy nie. Domyślnie plik układu pozostaje w pliku application.html.erb w folderze układu widoków.

<%= javascript_include_tag 'application' %> 

Następny link powinien mieć danych potwierdzenia & data-metody atrybuty jak

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

W erb, może to być napisane jak

= link_to 'Reset', message_path(@message), data: {method: 'delete', confirm: 'Are you sure?'} 

To powinno działać, jeśli wszystko jest dostosowane w taki sam sposób.