如果 JS 可能被禁用,Rails 4 link_to :delete 的最佳方法是啥?

Posted

技术标签:

【中文标题】如果 JS 可能被禁用,Rails 4 link_to :delete 的最佳方法是啥?【英文标题】:What is the best way to do Rails 4 link_to :delete if JS may be disabled?如果 JS 可能被禁用,Rails 4 link_to :delete 的最佳方法是什么? 【发布时间】:2013-07-23 07:03:49 【问题描述】:

这是一段非常标准的代码(Rails 4):

<%= link_to 'Log out', logout_path, :method => :delete %>

但是,这里有一个非标准的考虑:没有 javascript。如果没有 Javascript,jquery_ujs 无法获取它的钩子,因此该链接会创建一个普通的 GET /logout,它没有路由。

为什么?因为我想支持该站点的 Tor 隐藏站点版本,并且我必须假设 Tor 用户(很可能通过 Tor Browser Bundle 来)将禁用 JavaScript。 (我故意不想为他们启用 JS,以防止各种潜在的隐私泄露。我也不想允许 XSRF 攻击,例如允许某人使用 GET 注销我的用户,也不想让 UI 变得丑陋按钮。)

隐藏站点的功能比主站点低(例如不接受通过 tor 付款),但登录/注销等一些基本功能确实应该可以正常工作。

支持这一点的最佳方式是什么?

【问题讨论】:

【参考方案1】:

也许您可以使用表单助手创建form。这将允许您指定要使用的method。 Rails 会在 form 中生成一个隐藏字段,用于指定 HTTP 方法,Rails 在提交时使用该字段来确定要调用哪个控制器操作。

剩下要做的就是编写一些 CSS 来使提交按钮看起来像一个链接,但你可以很容易地在网络上找到它。

【讨论】:

以上是关于如果 JS 可能被禁用,Rails 4 link_to :delete 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Rails:禁用link_to链接不起作用但隐藏link_to工作

Rails 4:如何在 Rails 中使用 JQuery 禁用基于复选框值的文本字段

Rails 4.2 / Devise - 如果禁用cookie,则向用户显示特定消息

禁用 Rails 4 的 ActiveRecord

提交后禁用Rails中的link_to按钮以防止重复提交

使用方法对 link_to 的 ajax 请求:在禁用 javascript 的情况下放入 rails