我已经在我的应用程序上安装了设计,并在我的application.html.erb文件中应用了以下内容:
<div id="user_nav">
<% if user_signed_in? %>
Signed in as <%= current_user.email %>. This cannot be cheese?
<%= link_to 'Sign out', destroy_user_session_path %>
<% else %>
<%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
<% end %>
</div>
我运行了rake路由,确认所有路由都是有效的。
同样,在我的路线上。我有belonge_for:users和root:to => "home#index"。
当点击“签出”链接时,我得到以下路由错误:
No route matches "/users/sign_out"
知道是什么导致了这个错误吗?
大多数答案都是片面的。这个问题我已经遇到过很多次了。有两件事需要解决:
<%= link_to(t('logout'), destroy_user_session_path, :method => :delete) %>
删除方法需要指定
然后设计使用jquery,所以你需要加载这些
<%= javascript_include_tag "myDirectiveJSfile" %>
确保在myDirectiveJSfile.js中同时指定了jquery和jquery-ujs
//= require jquery
//= require jquery_ujs
让Logout链接成为DELETE RESTful调用的能力需要一个html属性data-method = " DELETE ",使用rails code = link_to('Logout', destroy_user_session_path,:method =>: DELETE)。
然而,如果你没有安装gem jquery-ujs,或者没有在你的application.html via = javascript_include_tag "application"中调用结果的javascript,响应将作为GET请求发送,路由将失败。
如果你不想使用jquery-ujs或者找不到让它工作的方法,你有几个选择:
改变配置。Sign_out_via等于:进入设计。rb(不推荐,因为DELETE是合适的RESTful查询)
或将link_to更改为= button_to('Logout', destroy_user_session_path,:method =>:delete)。使用button_to, Rails将在进行正确的DELETE调用时完成繁重的工作。然后,如果您愿意,可以将按钮样式设置为看起来像一个链接。