2016-01-13 94 views
0

我使用最新版本的设计和导轨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> 

in application.js文件。 但随后 注销

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

不起作用!它被呈现为GET/users/sign_out。

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

针对此问题的任何解决方法?

+0

的问题:如果你使用的轨道,为什么你在公众,而不是某种类型的轨道模板主页? –

+0

@TarynEast那么,我试图包括应用程序内,但一些影响失踪。 –

+0

是的,但你不应该以这种方式包含它 - 如果你正在做一个标准的rails应用程序应该是一个erb模板。 –

回答

0

您的JavaScript脚本有错误。

-

每次使用method: :deletemethod: :patch时间,Rails的填充用适当的动词形式,using Javascript正确设置:

[的link_to]动态创建一个HTML表单,并立即提交使用指定的HTTP动词进行处理的形式。用于链接执行POST操作,用于像删除记录这样的危险操作(搜索漫游器在抓取您的站点时可以跟踪)。支持的动词是:post,:delete,:patch和put。 请注意,如果用户禁用JavaScript,请求将回落到使用GET

以上,如果你的JavaScript被打破是真(即你有错误,导致它从页面上正常工作)。

-

因为我们还没有发布你的JS,我不能给你任何细节。

但是,我可以说你的JS应该是unobtrusive越好越好。

在您的Rails应用程序的任何地方使用<script>是不好的做法;你应该在你的application.js串联起来的sprockets manifest directives帮助文件:

#app/assets/javascripts/application.js 
//= require main 
//= require modernizr 
0

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

如果您使用的是标准rails模板,'application.js'清单文件会为您处理这个问题,但是假设您将index.html放在公共目录中,则必须手动包含这两个文件jqueryjquery-ujs在您的标题。

另一种方法是改变路线注销实际使用GET(你无论如何都会有与PUT和PATCH方法以及问题),添加以下内容到色器件的配置(从devise wiki):

# config/initializers/devise.rb 
# The default HTTP method used to sign out a resource. Default is :delete. 
config.sign_out_via = :get 

如果您打算使用rails,您应该了解为什么您使用标准rails处理视图模板时遇到问题。我使用了很多JavaScript重页,并且它们工作得很好。另外,您还可以获得资产管道的所有好处。

+0

我知道挂在devise.rb中,但我不想与GET方法相处。谢谢! –

+0

我认为,如果您使用'GET'注销,那么浏览器预取和将注销URL嵌入''标签中的用户可能会意外注销用户。 – Josh