Ruby on Rails 4:使用用户控制器设计,无法找到具有 'id'=sign_up 的用户
Ruby on Rails 4: Devise with Users Controller, Couldn't find User with 'id'=sign_up
我收到此错误:Couldn't find User with 'id'=sign_up
当我尝试在我的 [=44= 中转到 localhost:3000/users/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
为什么我收到错误是有道理的,因为我的 URL 中的 :id 是 sign_up,我只是不知道我应该做什么来解决这个问题。
当然,在 localhost:3000/users/ 之后,它总是会给我一个错误,因为我在用户控制器 [=20] 中的 show 方法中的 id =]
您有一个单独的 users_controller
,它不属于 devise
,因此 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
,它将在设计路线中找到,但找不到匹配项,因此最终它将映射到您的路线,如果没有定义这样的路线,它将抛出错误..
很高兴这对您有所帮助。 :)
我收到此错误:Couldn't find User with 'id'=sign_up
当我尝试在我的 [=44= 中转到 localhost:3000/users/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
为什么我收到错误是有道理的,因为我的 URL 中的 :id 是 sign_up,我只是不知道我应该做什么来解决这个问题。
当然,在 localhost:3000/users/ 之后,它总是会给我一个错误,因为我在用户控制器 [=20] 中的 show 方法中的 id =]
您有一个单独的 users_controller
,它不属于 devise
,因此 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
,它将在设计路线中找到,但找不到匹配项,因此最终它将映射到您的路线,如果没有定义这样的路线,它将抛出错误..
很高兴这对您有所帮助。 :)