繁体   English   中英

Ruby on Rails 4:使用用户控制器进行设计,找不到具有'id'= sign_up的用户

[英]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_upsign_out被定义为/users/sign_up(.:format)因此,假设您访问sign_up url,则它将检查设计中的路由并在其中找到匹配项。 因此它将重定向您到该路由。 现在,如果您输入/users/1 ,它将在设计路线中找到但找不到匹配项,因此最终它将映射到您的路线,并且如果没有这样定义的路线,则会引发错误。

很高兴这有所帮助。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM