vic*_*ich 385 routes ruby-on-rails devise ruby-on-rails-3
我在我的应用程序上安装了devise并在我的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>
Run Code Online (Sandbox Code Playgroud)
我跑了rake routes并确认所有路线都有效.
另外,在我的routes.rb文件中我有devise_for :users和root :to => "home#index".
单击"注销"链接时出现以下路由错误:
No route matches "/users/sign_out"
Run Code Online (Sandbox Code Playgroud)
是什么导致错误?
Jes*_*ker 567
我认为退出的路线是一种DELETE方法.这意味着您的退出链接需要如下所示:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)
你的不包括这:method => :delete部分.此外,请注意,要使其工作,您还必须包含<%= javascript_include_tag :defaults %>在您的布局文件(application.html.erb)中.
kit*_*sai 133
我在devise.rb中更改了这一行:
config.sign_out_via = :delete
Run Code Online (Sandbox Code Playgroud)
至
config.sign_out_via = :get
Run Code Online (Sandbox Code Playgroud)
它开始为我工作.
Gra*_*vis 60
您可能没有包含jquery_ujs javascript文件.确保您使用的是最新版本的jquery-ujs:https://github.com/rails/jquery-ujs以及可用的最新文件:
rails generate jquery:install
Run Code Online (Sandbox Code Playgroud)
你应该不会有任何更多的rails.js文件.如果你这样做,你可能已经过时了.确保此文件在config/application.rb中加载了默认值
config.action_view.javascript_expansions[:defaults] = %w(jquery.min jquery_ujs)
Run Code Online (Sandbox Code Playgroud)
(同样,你应该不会有rails.js这里提交).最后,添加Devise wiki(haml-style)中记录的链接:
= link_to('Logout', destroy_user_session_path, :method => 'delete')
Run Code Online (Sandbox Code Playgroud)
一切都会好起来的.
Wil*_*han 31
data-method = "delete"通过使用rails代码,使Logout链接成为DELETE RESTful调用的能力需要html属性= link_to('Logout', destroy_user_session_path, :method => :delete).
但是,如果您没有jquery-ujs安装gem 或未在application.html中调用生成的javascript = javascript_include_tag "application",则响应将作为GET请求发送,并且路由将失败.
如果您不想使用jquery-ujs或无法找到使其工作的方法,您有几个选项:
config.sign_out_via为:get内部相等devise.rb(不推荐,因为DELETE是适当的RESTful查询)link_to为= button_to('Logout', destroy_user_session_path, :method => :delete).使用button_toRails可以完成正确的DELETE调用.然后,您可以根据需要将按钮设置为类似链接的样式.Kev*_*soi 24
尝试添加一个新路由到devise/sessions#destroy并链接到那个.例如:
routes.rb
devise_for :users do
get 'logout' => 'devise/sessions#destroy'
end
Run Code Online (Sandbox Code Playgroud)
视图:
<%= link_to "Logout", logout_path %>
Run Code Online (Sandbox Code Playgroud)
小智 13
我在rails 3.1.0遇到了同样的问题,我解决了在文件中添加以下行:
app/assets/javascripts/application.js
//= require_tree
//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)
小智 13
在routes.rb文件中使用它:
devise_for :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
Run Code Online (Sandbox Code Playgroud)
Gal*_*len 10
除了一个例外,Jessie的回答对我有用:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)
更改:
:delete
Run Code Online (Sandbox Code Playgroud)
... 至:
'delete'
Run Code Online (Sandbox Code Playgroud)
所以适合我的代码是:
<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>
Run Code Online (Sandbox Code Playgroud)
许多问题的答案已经存在.对我来说,问题有两个:
当我扩展我的路线时:
devise_for :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
Run Code Online (Sandbox Code Playgroud)我得到警告,这是折旧的,所以我用以下代替:
devise_scope :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
Run Code Online (Sandbox Code Playgroud)我以为我会删除我的jQuery.糟糕的选择.Devise正在使用jQuery"伪造"DELETE请求并将其作为GET发送.因此,您需要:
//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)当然,与前面提到的许多链接相同:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Run Code Online (Sandbox Code Playgroud)加:
<%= csrf_meta_tag %> and
<%= javascript_include_tag :defaults %> to layouts
Run Code Online (Sandbox Code Playgroud)
使用这些link_to标签
link_to 'Sign out', destroy_user_session_path, :method => :delete
or
link_to 'Sign out', '/users/sign_out', :method => :delete
Run Code Online (Sandbox Code Playgroud)
在路线中添加:
devise_for :users do
get '/users/sign_out' => 'devise/sessions#destroy'
end
Run Code Online (Sandbox Code Playgroud)
其他选项是将注销配置为GET而不是DELETE,您可以这样做添加以下行 /config/initializers/devise.rb
config.sign_out_via = :get
Run Code Online (Sandbox Code Playgroud)
但正如Steve Klabnik在他的博客上所写(http://blog.steveklabnik.com/2011/12/11/devise-actioncontroller-routingerror-no-route-matches-get-slash-users-slash-sign-out.html )因为这种方法的语义,尝试使用DELETE.
小智 6
如果您使用的是Rails 3.1,请确保您的application.html.erb注销如下:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
并且您的javascript包含行如下所示
<%= javascript_include_tag 'application' %>
我的猜测是有些宝石会覆盖default.js位置的新结构.
小智 5
在github中查看源代码:
https://github.com/plataformatec/devise/commit/adb127bb3e3b334cba903db2c21710e8c41c2b40#lib/generators/templates/devise.rb (日期:2011年6月27日)
好吧,对我来说这只是删除了:method =>:delete
<%= link_to('Sign out', destroy_user_session_path) %>
Run Code Online (Sandbox Code Playgroud)
我想补充一点,即使它有点旧.
"sign_out"链接不起作用,尽管有:method =>:delete.
<%= javascript_include_tag :defaults %>必须包含的注释提醒我,我最近添加了JQuery java脚本并使用简单<script src=""/>标记来包含它们.
当我将它们从:默认为之前移动之后,sign_out再次开始工作.
希望这有助于某人.
这意味着在安装jquery-rails gem之后,您还没有生成jquery文件.所以首先你需要生成它.
rails generate devise:install
第一选择:
这意味着您必须更改以下行 /config/initializers/devise.rb
config.sign_out_via =:删除到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不会默认编写.
不要忘记在application.js中包含以下行(Rails 3)
//= require_self
//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)
包含jquery_ujs在我的rails应用程序中,现在可以使用了.
大多数答案都是部分的 我多次遇到过这个问题.需要解决两件事:
<%= link_to(t('logout'), destroy_user_session_path, :method => :delete) %>
Run Code Online (Sandbox Code Playgroud)
需要指定delete方法
然后设计使用jquery,所以你需要加载它们
<%= javascript_include_tag "myDirectiveJSfile" %>
Run Code Online (Sandbox Code Playgroud)
并确保在myDirectiveJSfile.js中指定了两个jquery和jquery-ujs
//= require jquery
//= require jquery_ujs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122398 次 |
| 最近记录: |