我想創建一個href標記,如href=contacts/create
。在我的contacts_controller中,我有一個創建GET操作。我知道這是違反鐵軌慣例。我仍然需要使用options = {controller=> 'contacts', action=>'create'}
創建上述鏈接。它適用於任何其他任意行爲的名字如何使用link_to創建href標記並創建動作
0
A
回答
0
就像你提到的,這是對Rails約定,但在絕對必要的,你可以從你的控制器做到這一點:
options = {controller=> 'contacts', action=>'create'}
view_context.link_to url_for(options)
如果您需要在href僅是路徑,你可以這樣做:
options = {controller=> 'contacts', action=>'create'}
view_context.link_to url_for(options.merge(only_path: true))
3
首先這是真的不好主意,因爲GET requests should be idempotent。你不只是嘲弄慣例 - 你正在設置你自己和你的用戶的時間是真的不好的時間因爲例如按下後退和前進按鈕將導致資源被創建 - 一遍又一遍。且有保證更好的辦法來解決任何你正在嘗試做的,如:
# a "discrete form"
<%= button_to "Create contact", contacts_path, method: :post %>
# or use the rails ujs
<%= link_to "Create contact", contacts_path, method: :post %>
如果你非得這樣做:
Rails.application.routes.draw do
get "contacts/create"
end
現在你可以這樣做:
<%= link_to "Create", { controller: 'contacts', action: 'create' } %>
恭喜你,你打破了互聯網。
3
您可以硬編碼的路徑選擇:
<%= link_to "Create", "contacts/create" %>
或Rails的生成路徑選項:
<%= link_to "Create", { controller: "contacts", action: "create" } %>
這不僅是對Rails的約定,但反對的聲音HTTP使用。這往往會造成嚴重的問題,您無法事先預測。網絡爬蟲只是其中之一,只需通過抓取頁面,Google Bot就會在數據庫中意外創建一個新聯繫人。或者腳本小子發現你有一個創建鏈接,並且連續發送10萬次點擊。
許多其他問題都會發生,包括在一個衆所周知的時間,谷歌瀏覽器預先從頁面獲取GET URL以「加速用戶體驗」;這被使用這種技術的網站感受到了很多。這不是一個空閒警告或風格問題:這可能會對您的網站造成災難性的影響。
+0
@yatishmehta如果這已經回答了您的問題,請點擊答案旁邊的複選標記以接受它。選中標記將變爲綠色。Upvotes也總是被讚賞:D –
相關問題
- 1. 如何創建錨標記
- 2. Rails:使用link_to創建不帶href的鏈接
- 3. 如何從link_to助手調用「創建」動作?
- 4. 動態創建錨標記
- 5. 創建可拖動標記
- 6. 在codeigniter中使用反斜槓創建錨定標記href
- 7. 創建HREF
- 8. 創建記錄後,Rails如何自動創建關聯記錄?
- 9. 如何使用未標記的標記創建菜單行爲?
- 10. 如何使用javascript動態創建表單標記
- 11. 如何使用拖放動畫爲多個標記創建Infowindows
- 12. 創建標記框
- 13. 使用link_to創建新文章
- 14. 使用link_to創建圖像鏈接
- 15. 使用文本和十字標記創建動態標記
- 16. 由innerHTML標記創建不起作用
- 17. org.tigris.subversion.javahl.ClientException用於創建標記
- 18. 創建記錄歷史記錄表 - 如何創建創建記錄?
- 19. 使用has_one創建記錄並belongs_to
- 20. Rails 4:Link_to標記不創建合適的html
- 21. 創建link_to和gsub鏈接
- 22. Rails 3 - 你如何創建一個新的記錄從link_to
- 23. 使用StreamingMarkupBuilder創建<use>標記
- 24. 使用Webgrid創建<th>標記
- 25. 使用批創建HTML標記
- 26. 不使用表標記創建HTML表
- 27. 使用參數創建鏈接標記
- 28. 使用JavaScript創建SVG標記
- 29. 如何使用AJAX創建記錄
- 30. 如何使用openshift創建mx記錄?
哈哈「祝賀你打破了互聯網」我喜歡那個:D – medBo
不幸的是它是遺留代碼!有人已經做了一些真正的好工作:( –