【问题标题】:Rails delete not working inside twitter bootstrap dropdown (2.1.0)Rails delete 在 twitter bootstrap 下拉列表中不起作用(2.1.0)
【发布时间】:2012-08-25 09:53:20
【问题描述】:

我刚刚升级 gem less-rails-bootstrap 以使用 twitter bootstrap 2.1.0,在我看来,它似乎破坏了这段代码,在引导下拉列表中:

<%= link_to 'Logout', destroy_admin_user_session_path, :method => :delete %>

服务器似乎认为这是一个 GET 请求而不是一个 DELETE。但是,如果我使用该视图代码并将其立即放在下拉列表之外,则效果很好,并且服务器可以识别 DELETE 请求。

如果我这样更改我的 gemfile:

gem 'less-rails-bootstrap', '~> 2.0.4'

然后运行“bundle update”并重新启动服务器,然后一切都会再次按预期工作。但如果我只是有:

gem 'less-rails-bootstrap'

然后运行 ​​'bundle update' 并重新启动服务器,然后服务器认为 DELETE 是一个 GET 请求。

我尝试切换到 gem 'twitter-bootstrap-rails',但出现了完全相同的问题。我想我一定是做错了什么?

【问题讨论】:

  • 我不确定原因是什么,但这可能与您在使用link_to 的链接上指定:method =&gt; :delete 时Rails 使用javascript 模拟表单有关。有关详细信息,请参阅documentation。也许新引导程序中添加的内容与该 javascript 冲突。
  • 我也是这么想的,但我仍然希望不是这样。我还没有找到其他人报告同样的问题,但这可能是因为 bootstrap 2.1.0 发布时间不长。
  • 请注意,下拉菜单中没有调用任何 javascript。在您的注销链接地址中,添加 confirm: "Logout?" 并注意它也不起作用。

标签: jquery ruby-on-rails twitter-bootstrap


【解决方案1】:

是的,这是一个 Twitter Bootstrap 问题。可能会在下一个版本中修复。在这里,试试这个快速修复:

$('body')
  .off('click.dropdown touchstart.dropdown.data-api', '.dropdown')
  .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() });

【讨论】:

  • 谢谢。只需使用 off 调用解除传播停止处理程序对我来说就足够了。
  • 老兄!惊人的。 Marc,只需在您的 application.js 文件中添加一个 $(function() { ...}); 块。
【解决方案2】:

显然其他人也有同样的问题:https://github.com/twitter/bootstrap/issues/4688

目前使用 devise 的快速修复似乎是将 devise.rb 更改为包括:

config.sign_out_via = :get

【讨论】:

  • 这会起作用,但通常认为通过 GET 公开应用程序注销是一种反模式。一些具体的原因 - 网络代理和浏览加速器可能会预取指向您的注销端点的链接,从而无意中将用户注销。以及用户可以在 Internet 上发布指向您的登录端点的 img 标签的任何地方,从而注销您的用户。
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多