Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RoR,Desive:登录的路由重定向到用户#显示_Ruby On Rails_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails RoR,Desive:登录的路由重定向到用户#显示

Ruby on rails RoR,Desive:登录的路由重定向到用户#显示,ruby-on-rails,ruby-on-rails-4,devise,Ruby On Rails,Ruby On Rails 4,Devise,当我转到localhost:3000/users/sign#u in时,我会被重定向到users#show,并显示一个错误(因为没有当前用户),而不是登录页面。据我所知,这不应该发生,但事实确实如此。如果单击指向新用户会话路径的链接,或者直接键入URI,我都会被重定向 我已经查看了我的路由中的重复项,并清除了会话和缓存。老实说,整个设计界面是如此简单,我不知道还有什么要检查。这在早些时候起了作用,所以很明显有些东西已经改变了 还有什么可能出错 耙路径 # output from rake:rou

当我转到localhost:3000/users/sign#u in时,我会被重定向到users#show,并显示一个错误(因为没有当前用户),而不是登录页面。据我所知,这不应该发生,但事实确实如此。如果单击指向新用户会话路径的链接,或者直接键入URI,我都会被重定向

我已经查看了我的路由中的重复项,并清除了会话和缓存。老实说,整个设计界面是如此简单,我不知道还有什么要检查。这在早些时候起了作用,所以很明显有些东西已经改变了

还有什么可能出错

耙路径

# output from rake:routes
# there are no other routes for this GET path

new_user_session GET    /users/sign_in(.:format)         devise/sessions#new
Routes.rb

#config/routes.rb

resources :users
devise_for :users
控制器

#app/controllers/user_controller.rb

before_action :confirm_signed_in

def confirm_signed_in
  unless user_signed_in?
    initiate_return_to_last_successful
    flash.now[:notice] = 'Please sign in.'
    redirect_to new_user_session_path
  end
end

注意:我最近试图修改Desive registrations controller创建操作。我不确定这是否是原因,但我已经退出了所有与之相关的更改(我相信。检查了三次)。

您需要切换这两行。文件顶部的路由优先,因此问题在于资源使用路由模式匹配

此路由由
resources
方法生成,匹配任何格式为
/users/anything\u can\u go\u here
的路由,替换
:id
的部分将在控制器中作为
参数[:id]
可用

GET '/users/:id' => 'users#show'
Desive生成的此路由需要放置在对
资源:用户的调用上方,以便在Rails眼中具有优先权

GET 'users/sign_in' => 'users#sign_in'
要解决此问题,请执行以下操作:

resources :users
devise_for :users
应该是

devise_for :users
resources :users

要了解更多关于RubyonRails中路由的信息,请查看。

Desive确实有一个before\u操作,
authenticate\u user可以替换您的
确认\u登录
。谢谢因为我想修改它,所以我自己做了。就是这样,这就解释了。非常感谢。