2013-04-03 191 views
11

我剛剛開始在rails上編寫ruby代碼,我一直在使用比我使用的更過時的rails版本。我使用3.2.12:確認在rails無法正常工作

這是我的代碼:

<%= button_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

從我個人理解,這是傳遞給鋼軌的符號,然後將其轉化到任何一個HTML或JavaScript的行動,然後啪啪彈出消息框並刪除對象(如果適用)。上面的代碼破壞了對象,但它不會彈出確認框。爲什麼是這樣?另外,我有上面首先如下:

<%= link_to 'Destroy', product, :method => "delete", :confirm => 'Are you sure?' %> 

確認框中沒有在任何情況下彈出,使用的link_to或button_to。下面是使用Chrome瀏覽器進行檢查時呈現的HTML。 jquery和jquery-ujs也加載到了,所以我不知道該從哪裏去。

<input name="_method" type="hidden" value="delete"> 
<input data-confirm="Are you sureeee?" type="submit" value="Destroy"> 
<input name="authenticity_token" type="hidden" value="Q2xicqELHYHtrwarbtPBe5PT2bZgWV5C+JdcReJI8ig="> 

謝謝!

回答

50

我不得不在數據屬性中添加我的確認屬性以使其起作用。我正在使用帶引導程序的rails 4。我希望這可以幫助有這個問題的其他人。

link_to 'Delete', @rule, method: :delete, data: { confirm: 'Are you sure you want to delete this alert?' } 
+0

是的,這對我來說。謝謝。 – Billy 2015-01-04 19:49:41

+0

嗯,那有效。 – Avishai 2015-05-06 21:40:48

+0

使用Rails 4和Foundation爲我工作。謝謝! – 2015-12-10 01:14:49

9

這依賴於jQuery的,確保您具備以下條件:

在你的Gemfile

group :assets do 
    gem 'jquery-rails' 
end 
在你的資產/ JavaScript的/的application.js文件

,行//= require_tree .

//= require jquery 
//= require jquery_ujs 
+0

我有你提到的兩個標籤,但它仍然不會彈出確認框 – jamesdlivesinatree 2013-04-04 06:31:48

+0

我想你捆綁安裝並重新啓動你的Rails服務器? – Benj 2013-04-04 06:50:46

+0

如何測試javascript是否正常工作?我不認爲這是事實,我認爲這是問題所在。我只是不確定是什麼原因造成的。 – jamesdlivesinatree 2013-04-04 07:20:20

5

link_to和button_to之間的區別是HTTP動詞。 link_to發出GET請求,button_to發出POST請求。使用RESTful路由,delete操作是對控制器/ ID的POST請求。如果您發出GET到控制器/編號,它將被分派到show操作。

AIUI,link_to與GET動詞以外的任何東西都是壞主意。其一,右鍵點擊不保留動詞。其二,您不希望漫遊器爬取頁面以跟隨鏈接,從而觸發delete操作,即使您可能需要登錄才能實際修改數據庫。

+1

謝謝你的解釋。非常翔實,現在更有意義。但是,我仍然很好奇如何獲得:確認彈出。這仍然不適合我。 – jamesdlivesinatree 2013-04-04 06:33:00

3

感覺非常愚蠢,但adblock阻止了消息框。對於那個很抱歉。現在一切都很好,我只是禁用了adblock。

+0

有趣:)但很高興你發現它:) – Benj 2013-04-06 08:03:03

0

我有一個在Chrome中運行的彈出窗口攔截器。我剛剛列入白名單http://localhost:3000,它對我很有幫助。