簡體   English   中英

為什么在rails中創建銷毀鏈接需要默認的javascript文件?

[英]Why are default javascript files required to create a destroy link in rails?

我今天想在Rails中創建一個基本的“destroy”鏈接,所以我寫了這個:

 <%= link_to "destroy me", @company, :method=>:delete
 %>

生成的代碼是:

<a href="/companies/1"
data-method="delete"
rel="nofollow">destroy me</a>

在我的路線,通常

resources :companies

我的摧毀行動在我的控制器里。

但是無論何時我點擊鏈接,我都會被重定向到show動作。 奇怪的。

事實證明我的布局中沒有包含以下行:

<%= javascript_include_tag :defaults %>

包含它后,銷毀鏈接有效!

為什么? 為什么我需要包含默認的javascript標記才能使其正常工作?

由於我不想使用原型,我如何只包含我需要的文件?

從3.0開始,Rails表單助手生成帶有HTML5數據屬性的干凈HTML標簽(在您的示例中為數據方法)。 為了支持這些數據屬性,原型需要rails.js。 如果你使用jQuery,則需要jQuery版本(https://github.com/rails/jquery-ujs)。

簡單地說,rails.js與javascript框架(prototype或jquery)一起做了一些魔術來掛鈎標簽上的點擊和其他事件,其他明智的當你點擊一個鏈接,正常點擊發生因為沒有javascript,鏈接是正常的鏈接。

這是因為html的局限性以及錨標簽無法使用除GET之外的任何方法提交請求的事實。

如果查看rails.js(將包含在:defaults ),當您單擊具有“data-method”的鏈接時,它會生成並提交一個表單,該表單使用正確的http方法提交到指定的URL。錨標記。

這是一個解決方法的黑客,但實際上沒有任何其他選項可以使普通錨標記提交DELETE請求(或任何其他HTTP動詞而不是GET)。

如果您不想使用js,請使用表單(可能使用button_to而不是link_to)來發出請求。 如果您創建自己的幫助程序來構建表單,您可以使用按鈕標記(而不是rails構建的輸入),這非常容易使樣式看起來像普通鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM