[英]Ruby on Rails 4: Devise with Users Controller, Couldn't find User with 'id'=sign_up
我收到此错误:当我尝试在URL浏览器中转到localhost:3000 / users / sign_up时 , Couldn't find User with 'id'=sign_up
用户 。
我有一个生成的单独的用户控制器...
我这样做:
rails g devise:controllers users
rails g controller Users show
我没有碰到由devise生产的控制器。
在我创建的常规用户控制器中,我有以下内容:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
在我的路线中:
devise_scope :user do
get 'users/:id' => 'users#show', as: :user
end
devise_for :users
我的rake routes
看起来像这样:
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
user GET /users/:id(.:format) users#show
为什么出现错误是有道理的,因为:id在我的URL中是sign_up,我只是不知道应该怎么做才能解决此问题。
当然,由于localhost:3000 / users /之后的用户 ,我的show方法中的id总是会给我任何错误:
你有一个独立的users_controller
不属于devise
使devise_scope
是没有用那里。 如果您需要使用任何devise_scope
控制器操作,那么devise_scope
很有用。 因此,只需按照以下步骤进行路线:
devise_for :users
get 'users/:id' => 'users#show', as: :user
当我们有相似的路线时,路线的顺序很重要。 在设计路由中, sign_up
, sign_out
被定义为/users/sign_up(.:format)
因此,假设您访问sign_up
url,则它将检查设计中的路由并在其中找到匹配项。 因此它将重定向您到该路由。 现在,如果您输入/users/1
,它将在设计路线中找到但找不到匹配项,因此最终它将映射到您的路线,并且如果没有这样定义的路线,则会引发错误。
很高兴这有所帮助。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.