我想创建一个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. 如何从link_to助手调用“创建”动作?
- 2. 动态创建锚标记
- 3. 创建记录后,Rails如何自动创建关联记录?
- 4. 如何使用未标记的标记创建菜单行为?
- 5. 如何使用javascript动态创建表单标记
- 6. 创建标记框
- 7. 使用link_to创建图像链接
- 8. 使用link_to创建新文章
- 9. 使用文本和十字标记创建动态标记
- 10. org.tigris.subversion.javahl.ClientException用于创建标记
- 11. 创建记录历史记录表 - 如何创建创建记录?
- 12. Rails 3 - 你如何创建一个新的记录从link_to
- 13. 使用批创建HTML标记
- 14. 使用参数创建链接标记
- 15. 使用JavaScript创建SVG标记
- 16. 如何使用AJAX创建记录
- 17. 如何Laravel创建锚标记5.1
- 18. 如何创建Google Latitude类似标记?
- 19. rails:如何动态创建记录并用id替换值?
- 20. 创建Excel文件作为html标记
- 21. 手动创建类型标记
- 22. 如何使用link_to在Rails 2.3.11中创建“空白”链接?
- 23. 使用libgit2创建并提交标签
- 24. 如何用新标记创建动态地图每秒出现?
- 25. 如何使用javascript并排创建两个标签使用javascript
- 26. 如何使用动态FM创建创建源代码
- 27. 如何使用动态创建的'el'创建Backbone视图?
- 28. 如何创建使用动态创建的按钮
- 29. 如何使用多个动态字段创建“创建视图”?
- 30. 如何选择并创建图标?
哈哈“祝贺你打破了互联网”我喜欢那个:D – medBo
不幸的是它是遗留代码!有人已经做了一些真正的好工作:( –