设计注销不起作用

时间:2016-01-13 05:27:57

标签: javascript ruby-on-rails devise

我使用最新版本的devise和rails 4.2.4。 我是我的主页

 public/index.html

其中包含大量的javascript。但是当我从其他页面加载它时,它并没有加载所有效果。所以包括

 $(document).on('page:load', ready);
 <script src="/js/modernizr-2.6.2.min.js"></script>
 <script src="/js/main.js"></script>
在application.js文件中

。 但是之后 退出

<%= link_to "Logout",destroy_user_session_path, method: :delete %>

不起作用!它被渲染为GET / users / sign_out。

当我从application.js中删除这些链接时,它可以正常工作。

此问题的解决方法是什么?

2 个答案:

答案 0 :(得分:0)

问题是大多数浏览器不支持DELETE方法,请求实际上将作为GET提交,并具有data-method="delete"属性。这依赖于页面加载的“jQuery的unobtrusive脚本适配器”(jquery-ujs)。

如果您使用的是标准rails模板,那么'application.js'清单文件会为您处理,但鉴于您将index.html放在公共目录中,您必须手动包含两个{ <1}}和标题中的jquery

另一种方法是将注销路由更改为实际使用GET(无论如何也会出现PUT和PATCH方法的问题),将其添加到您的设备配置中(来自devise wiki):

jquery-ujs

如果您打算使用rails,您应该找出处理视图模板的标准rails方式问题的原因。我使用了大量的javascript页面,它们工作得很好。此外,您还可以获得资产管道的所有好处。

答案 1 :(得分:0)

您的javascript中有错误。

-

每次使用method: :deletemethod: :patch时,Rails都会使用相应的动词using Javascript填充表单以正确设置:

  

[link_to]动态创建HTML表单并立即使用指定的HTTP谓词提交表单以进行处理。用于让链接在危险操作中执行POST操作非常有用,例如删除记录(搜索机器人可以在抓取您的站点时跟踪)。支持的动词有:post,:delete,:patch和:put。 请注意,如果用户禁用了JavaScript,请求将回退到使用GET

如果你的javascript被破坏,上面的情况就是如此(IE你有一个错误阻止它在页面上正常工作)。

-

由于你还没有发布你的JS,我不能给你任何细节。

但是,我可以说你的JS应尽可能为unobtrusive

在Rails应用中的任何位置使用<script>都是不好的做法;您应该在application.js的帮助#app/assets/javascripts/application.js //= require main //= require modernizr 中将文件连接起来:

.map