46

Tôi muốn thêm thông báo xác nhận vào hàm link_to với Ruby.Cách thêm thông báo xác nhận với link_to Ruby trên đường ray

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

Mọi ý tưởng tại sao nó không hoạt động?

+0

Bản sao có thể có của [Đường ray - Cách đặt cửa sổ bật lên xác nhận trên f.submit?] (Http://stackoverflow.com/questions/15771582/rails-how-to-put-a-confirmation-popup-on -af-submit) –

+0

Điều này dường như không trùng lặp chính xác với ví dụ được chỉ định. Ví dụ mẫu sẽ hỏi cách thêm xác nhận vào một biểu mẫu gửi; câu hỏi này hỏi cách thêm xác nhận vào liên kết. –

Trả lời

37

Trước tiên, bạn nên xác minh rằng cách bố trí của bạn có jquery_ujs. thực hành tốt nhất để làm điều đó bằng cách bao gồm nó trong chính application.js bạn:

//= require jquery_ujs 

Kiểm tra xem bạn đã bao gồm application.js trong cách bố trí của bạn:

= javascript_include_tag :application 

Trong khi, trong chế độ phát triển , xem html nguồn của bạn và xác minh jquery_ujs.js tồn tại.

Chạy máy chủ của bạn và xác minh thẻ liên kết của bạn có dữ liệu xác nhận giá trị, ví dụ:

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

Nếu tất cả những bước là chính xác, tất cả mọi thứ nên làm việc!

Lưu ý: séc railscast này http://railscasts.com/episodes/136-jquery-ajax-revised

3

Hãy thử điều này:

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

hoặc để được rõ ràng hơn

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

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

Bạn sẽ thấy rằng có 3 tham số, khi bạn đang đưa ra url như các tùy chọn như {:action => ..., :controller => ...}

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

Trong ruby, nếu tham số cuối cùng trong một cuộc gọi hàm là băm, bạn không cần bọc nó trong các ký tự {} (nói cách khác, bạn có thể bỏ qua trong trường hợp, nếu băm là tham số cuối cùng), thì mã bạn đã cung cấp sẽ được hiểu là một lời gọi hàm với chỉ có 2 thông số, 'Reset message' chuỗi và {:action=>'reset', :confirm=>'Are you sure?'} băm và :confirm=>'Are you sure?' sẽ được hiểu là một url_option thay vì một html_option

+0

Đây là mã mới như bạn đã đề xuất = link_to ('Đặt lại thư', {: action => "đặt lại"}, {: confirm => "Bạn có chắc chắn không?"}) .... và đây là html Reset message. 'dữ liệu-xác nhận' .... stil không mở tin nhắn xác nhận ... Cảm ơn. – Tini

+0

'data- *' là [thuộc tính dữ liệu tùy chỉnh] (http://www.w3.org/html/wg/drafts/html/master/dom.html#embedding-custom-non-visible-data-with-the -data - * - thuộc tính) được giới thiệu trong HTML5, được dùng làm vùng lưu trữ cho dữ liệu cá nhân. 'data-confirm' được sử dụng bởi đường ray để làm cho cửa sổ bật lên xuất hiện khi liên kết được nhấp. – veidt

+0

@Tini ... bạn đã bao gồm '<% = javascript_include_tag: mặc định%>' trong bố cục hoặc trang. Nếu không có nó sẽ không hoạt động. – rubyprince

101

tôi có thể bị nhầm lẫn nhưng bạn không chỉ định một bộ điều khiển cùng với tùy chọn :action. Bạn đã thử những điều sau đây chưa? Giả sử bạn có một nguồn tài nguyên messages cấu hình trong tuyến đường của bạn:

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

EDIT: Trên bị phản đối. Bây giờ Rails 4.0 chấp nhận lời nhắc làm thuộc tính dữ liệu. Xem tài liệu here (Cảm ơn @Ricky).

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

Tôi nghĩ kiểu này không còn được dùng nữa. Theo tài liệu đường ray, đây là thuộc tính dữ liệu, tức là '…, dữ liệu: {xác nhận: 'Bạn có chắc chắn không?'}' – Ricky

+0

@Ricky bạn nhận ra câu hỏi này và hầu như tất cả câu trả lời trên trang này đã được đăng vào tháng 5 21, 2013? Đó là tháng 9 năm 2014 ngay bây giờ. – veidt

+1

Vâng. Tha thứ cho tôi — Tôi không hoàn toàn đắm mình trong nền văn hóa stackoverflow! Có người hỏi về điều này, đã được chỉ dẫn ở đây và đã nhầm lẫn về lý do tại sao ": xác nhận" dường như không hoạt động. ''data-confirm'' hoạt động nhưng nó không thực sự là' đường ray 'hiện tại. Nói cách khác: cách tốt nhất để tôi ghi lại điều này là gì? – Ricky

0

Nhìn vào javascript_include_tag của bạn và nó sẽ làm việc tốt:

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

Như đã nêu ở trên, ': confirm' hiện không được chấp nhận nên bạn phải sử dụng hoặc" "dữ liệu xác nhận" => ... 'hoặc' dữ liệu: {xác nhận: ...} '. – lucasarruda

10

Không thể nhớ làm thế nào điều này đã được thực hiện trong Rails 3, nhưng trong Rails 4 bạn có thể chỉ đơn giản là:

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

Câu trả lời này đã giúp tôi nhiều nhất; nhóm các tham số riêng biệt với '{' và '}' trước phần 'dữ liệu - xác nhận' là những gì tôi phải làm. –

0

Đầu tiên, chúng ta cần phải hiểu những gì Gói Js đáp ứng với loại cảnh báo này trong ứng dụng đường ray. Vì vậy, cho điều này, gói jquery_ujs là reponsible cho hiển thị các cảnh báo trong đường ray.

Vì vậy, bạn phải có jquery & jquery_ujs trong tệp application.js của mình.

//= require jquery 
//= require jquery_ujs 

Bây giờ, chúng tôi cần xác nhận rằng tệp application.js đó được đưa vào bố cục bắt buộc của bạn hay không. Theo tệp sơ đồ bố trí mặc định vẫn còn trong application.html.erb trong thư mục layout của các khung nhìn.

<%= javascript_include_tag 'application' %> 

Tiếp theo liên kết nên có dữ liệu xác nhận & dữ liệu phương pháp tính như

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

Trong ERB, điều này có thể được viết như sau,

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

này nên làm việc nếu mọi thứ đều liên kết trong cùng một thời trang.

Các vấn đề liên quan