我已经在我的应用程序上安装了设计,并在我的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"

知道是什么导致了这个错误吗?


当前回答

在你的路线上。rb:

 devise_for :users do
    get '/sign_out' => 'devise/sessions#destroy'
    get '/log_in' => 'devise/sessions#new'
    get '/log_out' => 'devise/sessions#destroy'
    get '/sign_up' => 'devise/registrations#new'
    get '/edit_profile' => 'devise/registrations#edit'
 end

在你的application.html.erb中:

<%if user_signed_in?%>
          <li><%= link_to "Sign_out", sign_out_path %></li>
<% end %>

其他回答

一般来说,当你得到“没有路由匹配”,但你认为你已经定义了路由,然后再次检查http verb / request方法(是否它的get, put, post, delete等)的路由。

如果您运行rake路由,那么您将看到预期的方法,您可以将其与请求日志进行比较。

我认为退出的路由是一个DELETE方法。这意味着你的签出链接需要看起来像这样:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

你的不包括:method =>:delete部分。另外,请注意,要实现这个功能,你还必须在布局文件(application.html.erb)中包含<%= javascript_include_tag:defaults %>。

在你的路线上使用它。rb文件:

devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy'
end

这意味着在安装jquery-rails gem之后还没有生成jquery文件。首先你需要生成它。

Rails生成设计:安装

第一选择:

这意味着你必须改变/config/initializers/ design .rb上的下面一行

配置。Sign_out_via =:delete to config。Sign_out_via =:get

第二选择:

你只需要在视图文件中将<%= link_to "Sign out", destroy_user_session_path %>改为<%= link_to "Sign out", destroy_user_session_path,:method =>:delete %>。

通常:method =>:delete默认不写入。

尝试添加一个新的路由来设计/sessions#destroy并链接到它。例如:

routes.rb
devise_for :users do
  get 'logout' => 'devise/sessions#destroy'
end

观点:

<%= link_to "Logout", logout_path %>