我使用最新版本的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中删除这些链接时,它可以正常工作。
此问题的解决方法是什么?
答案 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: :delete
或method: :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